WCF Restful Service .NET 4 IIS 7.5问题(带有“''的消息无法处理)

0 iis rest wcf iis-7.5

我有一个wcf restful服务并正在运行。如果使用WebServiceHost启动Web服务,则可以毫无问题地发出Get / Post。我尝试将wcf服务移至本地机器上的IIS 7.5,但似乎无法正常进行。

我尝试从wcf服务调用任何内容时都收到以下错误消息:(http:// wp9dbytr1k1:8081 / service.svc / AnythingHereForGETorPUT)。我在虚拟目录/设备中尝试过,但遇到了同样的问题。

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).
Run Code Online (Sandbox Code Playgroud)

如果我直接调用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>
Run Code Online (Sandbox Code Playgroud)

出于显而易见的原因,由于它可以与WebServiceHost一起使用,因此感觉就像IIS设置一样。我已经搜索了有关如何设置它的错误/教程,对我来说一切似乎都很好。

有什么建议么?

谢谢

car*_*ira 5

要在WCF中创建REST端点,除了使用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>
Run Code Online (Sandbox Code Playgroud)

另一种选择是在.svc文件中使用WebServiceHostFactory,其工作方式类似于WebServiceHost。在这种情况下,您甚至不需要web.config中的system.serviceModel部分。

<% @ServiceHost Service="StoredProcService.DataRetreivalService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" Language="C#" debug="true" %>
Run Code Online (Sandbox Code Playgroud)