Как назвать простой сервис WCF с помощью jQuery или простого js

У меня есть очень простое привет мировой сервис WCF, как дали ниже. Когда я называю его с помощью проекта asp.net путем добавления ссылки веб-сервиса, это работает превосходное. Но когда я называю его с помощью jQuery или стандарта js ajax вызов (использование XMLHttpRequest) это отзывает функцию успеха, но возвращает пустые данные.

Когда я пытался получить доступ к нему через браузер Firefox с помощью этого адреса: http://localhost:8282/Test/TestService.svc/HelloWorld

Это возвратило ошибку с кодом "a:ActionNotSupported" и детали ошибки как

Сообщение с Действием '' не может быть обработано в получателе, из-за несоответствия ContractFilter в EndpointDispatcher. Это может быть из-за любого несоответствием контракта (Действия, которым не соответствуют, между отправителем и получателем) или несоответствием привязки/безопасности между отправителем и получателем. Проверьте, что отправитель и получатель имеют тот же контракт и ту же привязку (включая требования к защите, например, сообщение, Транспорт, Ни один).

Если я изменяю привязку к wsHttpBinding затем это ничего не возвращает даже в Firefox.

Вот код:

Файл "Test/ITestService.svc":

[ServiceContract(Namespace = "http://localhost:8282/")]
public interface ITestService
{

    [OperationContract]
    string HelloWorld();
}

Файл "Test/TestService.svc":

public class TestService : ITestService
{
    public string HelloWorld()
    {
        return "This is echo from server. Hello World";
    }
}

Файл "web.config"

<system.serviceModel>

    <services>
    <service name="radMLRPC.Test.TestService" behaviorConfiguration="radMLRPC.Test.TestServiceBehavior"
        <endpoint address="HelloWorld" binding="webHttpBinding" contract="radMLRPC.Test.ITestService">
            <identity>
            <dns value="localhost"/>
            </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
    <serviceBehaviors>
        <behavior name="radMLRPC.Test.TestServiceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>
5
задан marc_s 5 February 2016 в 08:19
поделиться

2 ответа

с кодом выше сервис разрешает только мыльные запросы, поэтому чтобы разрешить Get http запросы мы должны изменить код, как показано ниже:

В интерфейсе:

    [WebGet(UriTemplate="helloworld")]
    [OperationContract]
    string HelloWorld();

в веб конфиге:

  • добавить behaviorConfiguration:

    
    
  • затем в поведении добавьте следующий тег:

    < endpointBehaviors > < behavior name="webBehav" > < webHttp /> < /behavior > < /endpointBehaviors >

"пожалуйста, удалите лишние пробелы из вышеприведенного текста. он не показывает теги без лишних пробелов"


Посмотрите некоторые ресурсы для этого:

An Introduction To RESTful Services With WCF http: //msdn.microsoft.com/en-us/magazine/dd315413.aspx

Endpoint.TV screencasts:

Endpoint.TV в целом имеет действительно хорошее покрытие для WCF и WCF REST вещей. http: //channel9.msdn.com/shows/Endpoint/

5
ответ дан 14 December 2019 в 13:25
поделиться

Использование ASP.net WebServices, WCF Services и методов статической страницы из JavaScript (без MS AJAX)

Для webHttp и клиентского скрипта привязка mex бесполезна. оставь это сейчас.

Возможно, эта личность доставляет вам некоторое горе, оставьте пока что.

У вас есть адрес HelloWorld, чтобы вызвать метод HelloWorld в вашем сервисе, вам нужно будет вызвать http: // localhost: 8282 / Test / TestService.svc / HelloWorld / HelloWorld . брось это.

<services>
    <service name="radMLRPC.Test.TestService" behaviorConfiguration="radMLRPC.Test.TestServiceBehavior"
    <endpoint address="" binding="webHttpBinding" contract="radMLRPC.Test.ITestService"/>
  </service>
</services>
<behaviors>
    <serviceBehaviors>
    <behavior name="radMLRPC.Test.TestServiceBehavior">
    <serviceMetadata httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Теперь, когда может не довести вас до конца, но даст нам лучшую отправную точку. Я готов помочь вам решить эту проблему.

Сравните то, что у нас есть сейчас, с рабочим примером, показанным в связанной статье

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="AjaxEndpointBehavior">
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="ClientScriptServices.Service1Behavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="ClientScriptServices.Service1Behavior" name="ClientScriptServices.Service1">
      <endpoint behaviorConfiguration="AjaxEndpointBehavior" binding="webHttpBinding" contract="ClientScriptServices.Service1" />
    </service>
  </services>
</system.serviceModel> 

И посмотрите, сможем ли мы придать вашей конфигурации аналогичную форму, и мы сможем охватить некоторые тонкости настройки ваших входных и выходных форматов .

1
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: