自托管WCF服务抛出错误消息“405方法不允许”

时间:2016-05-12 08:48:31

标签: c# wcf

我有一个自托管WCF服务,如下所示:

[ServiceContract]    
public interface IService {
    [OperationContract]     
    [WebGet]   
    List<Data> GetData();
    //...and much more Methods
}

我的App.config看起来像这样:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <behaviors>
    <serviceBehaviors>
      <behavior name="MetaInformation">
        <serviceMetadata httpGetEnabled="true"
                         httpGetUrl="http://localhost:8500/MetaInfo"
                         httpsGetBinding="" />
        <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="EndpointBehavior">
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <services>     
    <service behaviorConfiguration="MetaInformation" name="Library.WcfService.ServiceModel">
      <endpoint address="http://localhost:8500/Service"
                binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBindingSettings"
                contract="Library.WcfService.IService"
                bindingName="BasicHttpBindingSettings"
               behaviorConfiguration="EndpointBehavior"/>                        
    </service>
  </services>
  <bindings>      
    <basicHttpBinding>
      <binding name="BasicHttpBindingSettings"
               closeTimeout="00:50:00"
               openTimeout="00:50:00"
               sendTimeout="00:50:00"
               maxBufferSize="524288"
               transferMode="Streamed"
               maxReceivedMessageSize="2147483647"
               maxBufferPoolSize="2147483647"
               messageEncoding="Text">
        <readerQuotas maxDepth="2147483647"
                      maxStringContentLength="2147483647"
                      maxArrayLength="2147483647"
                      maxBytesPerRead="2147483647"
                      maxNameTableCharCount="2147483647" />
      </binding>
    </basicHttpBinding>
  </bindings>
</system.serviceModel>

<system.web>
  <httpRuntime maxRequestLength="102400"/>    
</system.web>

当我在本地计算机上运行此服务器和客户端应用程序时,它运行正常。 但是当我尝试在另一台PC上运行服务器应用程序时,我无法在客户端添加服务引用,因为我得到了这个:

  

405方法不允许元数据包含无法解析的引用:“http://192.168.178.54:8500/MetaInfo”。它不是一个   听http://192.168.178.54:8500/MetaInfo端点出现谁   可以接受这个消息。这通常是由不正确引起的   地址或SOAP操作

我几乎尝试了在互联网上找到的所有东西,但没有任何效果。 切换到IIS或使用其他协议应该是一个计划B,我想保持自己托管http。

请有人帮助我,我对这个问题感到绝望。

1 个答案:

答案 0 :(得分:0)

您的操作合同上标有[WebGet]属性,这意味着您尝试将服务公开为REST。但是,您的服务使用basicHttpBinding作为构建不受支持的通信渠道的方法,因为此绑定的内容类型为soap+xml。在这种情况下,您需要使用WebHttpBinding,这是唯一支持WCF Services的静态实现并支持XmlJson数据类型的绑定。