向WCF添加服务引用(失败)

时间:2013-05-13 13:45:38

标签: c# wcf c#-4.0

我一直在尝试使用WCF并将DataContract添加到我的服务器并更新了ServiceContract。当ServiceReference首次添加到客户端时,我在同一台PC上运行它们,所以我使用localhost。我现在尝试通过以太网电缆连接2个电脑并以这种方式更新服务参考。我已将局域网上的服务器IP地址设置为192.168.10.10。在服务器表单上单击按钮时,将执行以下代码。

private void btnCommenceService_Click(object sender, EventArgs e)
    {
        host = new ServiceHost((typeof(Service)), new Uri[] { new Uri("http://localhost:9000")});   
        host.AddServiceEndpoint(typeof(IServices),
            new WSDualHttpBinding(),
            "ServerService");

        ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
        smb.HttpGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        host.Description.Behaviors.Add(smb);

        host.Open();
        txtStatus.Text = "Service is open.";
    }

我已经在两台电脑上关闭了防火墙,并成功地从客户端电脑ping了地址"http://192.168.10.10"。如果我在浏览器中输入,我也设法访问了一些随机网页。

在客户端,如果我点击我的解决方案并选择“添加服务参考”并输入

"http://192.168.10.10" "http://192.168.10.10:9000" "http://192.168.10.10:9000/ServerService"

所有这些都带有某种形式的错误,通常是以下几行:

The document at the url http://192.168.10.10:9000/ was not recognised as a known document type.
The error message for each known type may help u fix the problem:
-Report from 'XML Schema' is The document format is not recognised(the content type is 'text/html;charset=utf-8').'.
Report from DISCO Document is There was an error downloading `'http://localhost:9000/?disco'.'.` 
Unable to connect to the remote server. 
No connection could be made because the target machine actively refused it 127.0.0.1:9000
etc

任何人都有一些指示,说明为什么它不通过LAN工作但我可以访问并ping通地址?

3 个答案:

答案 0 :(得分:1)

尝试像这样更改绑定安全配置

WSDualHttpBinding wsDualBinding= new WSDualHttpBinding();
wsDualBinding.Security.Mode = WSDualHttpSecurityMode.None;
wsDualBinding.Security.Message.ClientCredentialType = MessageCredentialType.None;

然后添加服务端点

host.AddServiceEndpoint(typeof(IServices),wsDualBinding,"ServerService");

希望它有用

答案 1 :(得分:1)

您已通过以太网直接连接2台电脑。你在使用交叉电缆吗? 2 pc是否在同一子网掩码中?例如。 255.255.255.0?

答案 2 :(得分:0)

最后让它工作但我选择重新启动整个Server项目。我在下面列出了我做的所有不同的事情,其中​​一些可能是问题,其他可能不是。

  1. 创建了一个wcf服务库,而不是仅仅尝试使用winforms程序。服务库完成后,我在winforms应用程序中引用它并将其app.config中的代码复制到winforms app.config中。

  2. 要特别注意基地址和端点地址,因为您需要将它们加在一起,然后从客户端连接到该端点。

  3. 正如User1467261所提到的,我确保我可以双向ping。我不得不进入控制面板 - > ..->网络连接选择LAN - >属性 - > ipv4选项,然后在两台PC上指定唯一的IP地址。 (我猜很多人已经知道了这个,但我不知道怎么做。)

  4. 正如Feras Salim所说,两个安全设置都是默认设置,因为我刚刚在笔记本电脑上创建了一个新用户,其用户名和密码与另一台计算机相同。

  5. 客户端,我使用了添加服务参考。我不太清楚mex终点用于什么,但我只是连接到基地址,它更新了我的app.config文件客户端。请记住在添加服务引用时为您指定的命名空间包含using语句。

  6. 服务器端,请记住在自定义类上使用属性而不是字段。

  7. 非常感谢Feras Salim,User1467261为您提供帮助。