WCF Restful Service .NET 4 IIS 7.5 Проблемы (сообщение с действием '' не может быть обработано) - PullRequest
0 голосов
/ 13 июня 2011

У меня есть и работает wcf restful. Я могу выпустить Get / Post без проблем, если я запускаю веб-сервис с помощью WebServiceHost. Я попытался переместить службу wcf в IIS 7.5 на своем локальном компьютере, и я никак не могу его запустить.

Я получаю следующую ошибку, все, что пытаюсь вызвать из службы wcf: (http://wp9dbytr1k1:8081/service.svc/AnythingHereForGETorPUT). Я пробовал в виртуальном каталоге / Appliances, и у меня возникает та же проблема.

The message with Action '' cannot be processed at the receiver, due to a     ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract  mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).

если я вызываю файл SVC напрямую (http://wp9dbytr1k1:8081/service.svc),, он счастлив и говорит мне

"Вы создали сервис. Чтобы протестировать этот сервис, вам нужно будет создать клиент и использовать его для вызова сервиса. Это можно сделать с помощью инструмента svcutil.exe из командной строки со следующим синтаксисом: svcutil.exe http://wp9dbytr1k1:8081/FUU/service.svc?wsdl"

Трассировка треков из средства просмотра трасс не помогла: извините, добавлена ​​ссылка, пока нельзя публиковать изображения. (ImageLink)

Вот мой web.config

  <system.serviceModel>
    <bindings>
      <mexHttpsBinding>
        <binding name="NewBinding0" />
      </mexHttpsBinding>
      <webHttpBinding>
        <binding name="WebBinding">
          <readerQuotas maxDepth="524288" maxStringContentLength="524288"
            maxArrayLength="524288" maxBytesPerRead="524288" maxNameTableCharCount="524288" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="StoredProcBehaviors" name="StoredProcService.DataRetreivalService">
        <endpoint address="" binding="webHttpBinding" bindingConfiguration="WebBinding"
          contract="StoredProcService.IDataRetreivalService">
          <identity>
            <dns value="locahost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
          contract="StoredProcService.IDataRetreivalService" />
        <host>
          <baseAddresses>
            <add baseAddress="http://WP9DBYTR1K1:8081/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="StoredProcBehaviors">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

По понятным причинам это похоже на настройку IIS, поскольку он работает с WebServiceHost. Я погуглил ошибки / учебники о том, как это настроить, и все мне кажется хорошим.

Есть предложения?

Спасибо

1 Ответ

5 голосов
/ 13 июня 2011

Чтобы создать конечную точку REST в WCF, вам нужно, помимо использования WebHttpBinding, иметь поведение конечной точки с ней.

  <system.serviceModel>
    <services>
      <service behaviorConfiguration="StoredProcBehaviors" name="StoredProcService.DataRetreivalService">
        <endpoint address="" binding="webHttpBinding" bindingConfiguration="WebBinding" behaviorConfiguration="REST"
          contract="StoredProcService.IDataRetreivalService">
          <identity>
            <dns value="locahost" />
          </identity>
        </endpoint>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="REST">
          <webHttp/>
        </behavior>
      <endpointBehaviors>
    </behaviors>
  </system.serviceModel>

Другой вариант - использовать WebServiceHostFactory в .svcфайл, который работает как WebServiceHost.В этом случае вам даже не нужен раздел system.serviceModel в web.config.

<% @ServiceHost Service="StoredProcService.DataRetreivalService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" Language="C#" debug="true" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...