【问题标题】:Adding a service reference to WCF (failure)添加对 WCF 的服务引用(失败)
【发布时间】:2013-05-13 13:45:37
【问题描述】:

我一直在试验 WCF,并将 DataContract 添加到我的服务器并更新了 ServiceContract。当 ServiceReference 首次添加到客户端时,我在同一台电脑上运行它们,所以我使用了 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 地址吗?

【问题讨论】:

  • 如果您将浏览器指向:'192.168.10.10:9000/ServerService?wsdl'会发生什么
  • ive 刚刚在命令提示符下输入了 telnet 192.168.10.10 9000 并且它似乎可以工作。我假设这意味着实际项目中存在问题。我在服务器端没有 app.config。我在客户端有一个。尽管 但它完全清晰的 atm
  • 您是否尝试过从服务器 ping 客户端?由于 wsDualHttpBinding 需要客户端和服务器之间的双向通信,也许您可​​以先尝试使用 basicHttp 或 netTcp,至少可以隔离问题。返回客户端的端口可能无法访问。
  • 我将客户端 ip 设置为 192.168.10.11 但我无法从服务器 ping 它。两个防火墙都关闭了。
  • 如果你不能从服务器ping客户端,wsDualHttpBinding肯定是不行的。如果您只在 LAN 上工作,我推荐 wsNetTcp - 它更易于管理且速度更快,并且它支持双向通信。接下来我会试试这个。如果您必须让 wsDualHttp 正常工作,那么是时候致电您的 IT 支持以找出服务器无法 ping 客户端的原因。

标签: c# wcf c#-4.0


【解决方案1】:

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

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

然后添加服务端点

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

希望有用

【讨论】:

  • 嘿,感谢您提供的信息(我想知道如何在没有 app.config 的情况下设置安全模式,因此 :) )。不幸的是,她仍然没有连接。为以上内容 +1
  • 双方是否使用相同的安全配置??
  • 您可以在任何类型的绑定中使用此配置,如果您想以soap格式(XML)传递消息,请尝试将绑定更改为BasicHttpBinding,或者您可以使用WSHttpBinding以rest格式传递它们
  • 不,我在客户端中有以下内容:安全模式 = 消息,clientcredentials = windows,negotiateServiceCredential = true,algorithumSuite = default。如果这是问题所在,为什么它更早起作用?
  • 之前你在同一台电脑上运行客户端和服务器,因为它可以工作,但从电脑到另一台即。 clientcredentails=windows 是从windows改成另外一个windows 虽然版本一样
【解决方案2】:

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

【讨论】:

  • 是的,我现在让服务器 ping 客户端。两者也具有相同的子网掩码。我在他们两个之间使用以太网电缆。它昨天还在工作。就在我尝试添加 DataContract 并尝试通过局域网对其进行更新时,它无法正常工作。我尝试在同一台电脑上同时运行客户端和服务器时更新服务引用,它会更新,但随后我收到一条错误消息,提示无法将类型 ClientFrazMan.ServerService.MyData[] 隐式转换为 System.Collections.Generic.List。我要休息一下。 +1 为你的帮助:)
【解决方案3】:

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

  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. 服务器端,记住在自定义类中使用属​​性而不是字段。

非常感谢 Feras Salim,User1467261 的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2015-04-15
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多