2015-01-30 8 views
0

Сначала я создал веб-сервис в проекте ASP.net, а затем переместил его код в библиотеку классов в файл CSharp (.cs).Как можно получить доступ к WebService, созданному в библиотеке классов?

Я также добавил реализацию «IHttpHandlerFactory» в этом вновь созданном классе, так что я мог бы зарегистрировать эту услугу в файле web.config:

public class Test: WebService, IHttpHandlerFactory 
{ 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string Hello(string world) 
    { 
     return "Hello " + world; 
    } 

    private static WebServiceHandlerFactory wshf = new WebServiceHandlerFactory(); 
    private static MethodInfo coreGetHandlerMethod = typeof(WebServiceHandlerFactory).GetMethod("CoreGetHandler", BindingFlags.Instance | BindingFlags.NonPublic); 
    public System.Web.IHttpHandler GetHandler(System.Web.HttpContext context, string requestType, string url, string pathTranslated) 
    { 
     return (IHttpHandler)coreGetHandlerMethod.Invoke(wshf, new object[] { GetType(), context, context.Request, context.Response }); 
    } 

    public void ReleaseHandler(IHttpHandler handler) 
    { 

    } 
} 

и зарегистрировал его в web.config:

<add name="TestService" path="TestService.asmx" verb="*" type="MyApp.Library.Test, MyApp.Library, Version=1.0.0.0, Culture=neutral" preCondition="integratedMode" /> 

я могу получить доступ к нему здесь:

http://localhost:8090/TestService.asmx 

и она отлично работает при использовании бровей э.

У меня был ранее работающий вызов ajax. Я только должен был изменить URL службы:

/TestService.asmx 

Теперь, когда служба вызывается с помощью Ajax, получается ошибка:

System.InvalidOperationException: Request format is invalid: application/json; charset=utf-8. 
at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters() 
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest() 

У меня есть

contentType: "application/json; charset=utf-8", 

в jQuery Ajax Call. Потратив несколько часов в расстройстве, я нашел ссылку на эту страницу, которая на самом деле рассматривала этот вопрос:

http://www.springframework.net/doc-latest/reference/html/webservices.html

Я не хочу, чтобы добавить дополнительную зависимость к Spring.NET для выполнения этой задачи, так как я уже использую замок виндзор.

Как можно получить доступ к веб-сервису, который был создан в проекте библиотеки классов и зарегистрирован в web.config, в качестве веб-страницы ASP.net?

+0

Я думаю, что вы должны быть 'потребляя webservice' не перемещая код лично в библиотеку класса любым способом, чтобы получить доступ к WebService из класса библиотеки вас нужно будет использовать этот «WebService», добавив новую ссылку -> advanced-> WebService' , тогда вам нужно будет просмотреть и/или ввести точный URL-адрес, где у вас есть файл .asmx .. вот хорошая ссылка читать, чтобы сделать вещи проще http: //www.c-sharpcorner.com/uploadfile/prvn_131971/chapter-31creating-web-services/также, поскольку вы используете JSON, есть еще более простое видео на youtube для потребления Linq2Sql webservice – MethodMan

+0

Я не потребляю веб-службу из библиотеки классов, но выставляю ее из нее. –

+0

тот же самый принцип применяется. Я разоблачаю тот, который я только что создал вчера. И я создаю небольшое консольное приложение, чтобы выполнить его и отлаживать, и он работает безупречно. Я даже могу проверить его локально, запустив его из проекта, в котором я создал пустой веб-сайт. Затем добавлен новый элемент-> выбранный веб-сервис и добавлен в мой [веб-метод] ... и т.д. работает как шарм. Как я уже сказал, если вы разоблачаете его, почему вы чувствуете необходимость добавить его в класс Library .. если это не приложение веб-службы WCF, но все же я думаю, вам нужно понять, как потреблять веб-сервис – MethodMan

ответ

0

Я отвечаю на свой вопрос, чтобы каждый, кто сталкивался с этой проблемой, не должен был ударять головой о стену. Кажется, что WebService, созданный по проекту библиотеки классов .NET Framework (4.5.1) будет игнорировать параметр:

ResponseFormat = ResponseFormat.Json 

Даже при указании JSON в качестве формата ответа, он все равно будет реагировать с объектом XML ,

Итак, я изменил свое требование, чтобы решить проблему.

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Xml)] 
public string Hello(string world) 
{ 
    return "Hello " + world; 
} 

на яваскрипта части

$.post(url, function (result) { 
    //result is an XML object 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^