无法通过WCF测试客户端测试自托管WCF服务

时间:2011-08-25 15:15:10

标签: c# .net wcf wcf-binding wcf-client

我正在尝试使用WCFTestClient测试我自己托管的wcf服务。我得到一个错误:

  

错误:无法从http://localhost:2303/MyService获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata上的MSDN文档.Exchange错误URI:http://localhost:2303/MyService元数据包含无法解析的引用:'http:// localhost:2303 / MyService'。内容类型application / soap + xml;服务http://localhost:2303/MyService不支持charset = utf-8。客户端和服务绑定可能不匹配。远程服务器返回错误:(415)无法处理消息,因为内容类型为'application / soap + xml; charset = utf-8'不是预期的类型'text / xml; charset = utf-8'.. HTTP GET错误URI:http://localhost:2303/MyService下载'http:// localhost:2303 / MyService'时出错。请求失败,HTTP状态为400:错误请求。

我的项目结构如下

  1. 充当主机的控制台应用程序
  2. 服务合同
  3. 服务实施
  4. 这是我的服务实现和合同类,它们分为两个独立的项目。

    namespace MyService
    {
        public class MyService : IMyService
        {
            public string GetGreeting(string name)
            {
                return "Hello " + name;
            }
    
            public string GetYelling(string name)
            {
                return "What the hell " + name + "!!";
            }
        }
    }
    
    namespace MyService
    {
        [ServiceContract]
        public interface IMyService
        {
            [OperationContract]
            string GetGreeting(string name);
    
            [OperationContract]
            string GetYelling(string name);
        }
    }
    

    这是控制台应用

    namespace MyWCFHost
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                ServiceHost serviceHost = new ServiceHost(typeof(MyService.MyService), new Uri("http://localhost:2303"));
                serviceHost.Open();
    
                Console.WriteLine("MyService is running...");
                Console.ReadKey();
                serviceHost.Close();
            }
        }
    }
    

    这是配置文件

    <configuration>
    
      <system.serviceModel>
        <services>
          <service name ="MyService.MyService" behaviorConfiguration="MyService.MyServiceBehavior">
            <endpoint address="http://localhost:2303/MyService" binding="basicHttpBinding" contract="MyService.IMyService"/>
            <endpoint address="mex" binding="mexHttpBinding" name="mexpoint" contract="IMetadataExchange" />
          </service>
    
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyService.MyServiceBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
      </system.serviceModel>
    
    
    </configuration>
    

    我做错了什么?

    感谢您的时间......

    修改

    当我尝试通过winforms客户端运行它时服务工作,所以我知道服务正在运行。问题是如何使用WcfTestClient为测试做好准备。

3 个答案:

答案 0 :(得分:3)

我怀疑您的MEX端点有问题。您目前只指定相对地址(“mex”) - 但您的服务中没有定义HTTP的基地址......

我建议:

  • 要么定义一个基地址,然后只使用相对地址“on the top” - 对于常规和您的MEX端点

OR:

  • 将您的地址定义为完整的完整地址 - 不仅适用于您的常规端点,也适用于MEX端点。

因此,请将配置更改为:

<service name ="MyService.MyService" behaviorConfiguration="MyService.MyServiceBehavior">
    <endpoint 
        address="http://localhost:2303/MyService" 
        binding="basicHttpBinding" 
        contract="MyService.IMyService"/>
    <endpoint name="mexpoint" 
        address="http://localhost:2303/MyService/mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" />
  </service>

然后我希望您能够获取元数据,从而连接到您的服务!

答案 1 :(得分:1)

您运行的是Windows 7吗?

尝试跑步:

netsh http add urlacl url=http://+:2303/MyService user=DOMAIN\user

更多infotoo

答案 2 :(得分:0)

尝试以管理员身份运行Visual Studio。然后你不需要手动运行命令,如(url = http:// +:2303 / MyService user = PCNAME \ mylogin)