0

我对这个 WCF 服务完全陌生,所以任何指导方针都将不胜感激。

我收到了一个大型项目,其中包含检查某个设备的网络状态的代码。我的老板告诉我搜索 TCPSocket 创建并更改套接字上的某些选项。

检查网络状态的函数是 ReqDDCNetworkStatus。自然地,我搜索了代码的来源,在我的服务参考下找到了这个接口:

public interface LGeDDC
{
    [System.ServiceModel]
    [System.ServiceModel.XmlSerializerFormatAttribute()]
    [return: System.ServiceModel.MessageParameterAttribute(Name="result")]
    string ReqDDCNetworkStatus(out string status);
}

该文件名为 References.cs,我假设它是通过在 WSDL (SOAP) 文件上运行 svcutil.exe 生成的,该文件用于在程序和相关设备之间进行通信。

这是具有被调用的实际函数的类:

namespace XrayEngines.DDCService
{
    public partial class LGeDDCClient : System.ServiceModel.ClientBase<LGeDDC>, LGeDDC
    {
        public LGeDDCClient(string endpointConfigurationName, string remoteAddress) : 
                base(endpointConfigurationName, remoteAddress)
        {
        }

        public string ReqDDCNetworkStatus(out string status)
        {
            return base.Channel.ReqDDCNetworkStatus(out status);
        }
    }
}

因此,该函数将按以下方式调用:

try
{
    for (int i = 0; i < p.Length; i++)
    {
        v = ddc.ReqDDCNetworkStatus(out r);
        writeMessage("v:" + v + " , r:" + r);
    }
}
catch (Exception e)
{
    writeMessage("Network Exception Occurred: ."+e.ToString());
}

我迷路了。从字面上看,我看不到任何可以在客户端和服务器之间建立任何连接的东西,但是该程序可以正常工作。如果有人可以解释如何以这种方式建立连接,我将不胜感激。

4

2 回答 2

2

神奇之处在于这两行:

 public partial class LGeDDCClient : System.ServiceModel.ClientBase<LGeDDC>

return base.Channel.ReqDDCNetworkStatus(out status);

代理类继承自ClientBase,该类实现了消息的实际发送(执行远程调用)。

于 2012-06-14T07:37:25.160 回答
1

基类 System.ServiceModel.ClientBase 完成所有连接工作。您只需设置服务的 URL 和一些其他参数,通常使用配置文件完成。检查服务端点的配置文件,参数..

于 2012-06-14T07:38:47.880 回答