自托管WCF服务:无法使用wcfTestClient - 无法获取元数据

时间:2015-12-29 18:13:30

标签: c# wcf utf-8

服务正常工作,但由于某种原因,我无法使用本地电脑上的wcftestclient.exe到服务器 - 我想用wcftestclient.exe调用方法。

它的所有公司内部,自托管(在Windows服务中运行,没有iis)。框架4. Basichttpbinding,不需要任何安全的东西。

这是我的servicemodelconfig ...

<system.serviceModel>
    <services>
      <service name="myService">

        <endpoint
          address="http://servername:8001/myService" 
          binding="basicHttpBinding"
          contract="IMyService" />

      </service>
    </services>


    <behaviors>
      <serviceBehaviors>
        <behavior name ="MyDefaultBehaviour">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://servername:8001/myService/mex" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceThrottling maxConcurrentCalls="1" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

我明白了......

错误:无法从中获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange错误URI:

上的MSDN文档

元数据包含无法解析的引用:&#39;。内容类型application / soap + xml;服务

不支持charset = utf-8

客户端和服务绑定可能不匹配。远程服务器返回错误:(415)无法处理消息,因为内容类型&#39; application / soap + xml;字符集= UTF-8&#39;不是预期的类型&text; / xml; charset = utf-8&#39; .. HTTP GET错误URI:

下载&#39; http://

时出错

请求失败,HTTP状态为400:错误请求。

我已经删除了上面的服务器名称,因此有很多空白,但希望这些信息足够清晰。

我确实尝试过添加额外的端点......

<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />

但有了这个,Windows服务就无法启动。

由于

-----后来添加---也试过这个,但是再一次,服务没有开始

<system.serviceModel>
    <services>
      <service name="myService" behaviorConfiguration="MyDefaultBehaviour">
        <host>
          <baseAddresses>
            <add baseAddress="http://myServer:8001/myService" />
          </baseAddresses>
        </host>

        <endpoint
          address=""
          binding="basicHttpBinding"
          contract="Contracts.ImyService" />

        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetaDataExchange" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name ="MyDefaultBehaviour">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceThrottling maxConcurrentCalls="1" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

2 个答案:

答案 0 :(得分:0)

如果添加mexendpoint,则需要添加baseAddress: 如下所示:

<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:9999/WcfTcp/Service1"/>
          </baseAddresses>
        </host>

答案 1 :(得分:0)

我的第二个配置毕竟是可行的,即使用basaddresses,标准端点的空字符串和“mex”端点。 IMetadataExchange拼写错误的大写D.排序。非常感谢@Grady