对WCF服务感到困惑

时间:2012-06-14 07:29:01

标签: c# .net wcf

我对这个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());
}

我迷路了。我确实没有看到任何在客户端和服务器之间建立任何连接的东西,但程序工作。如果有人能够以这种方式提供关于如何建立连接的解释,我真的很感激。

2 个答案:

答案 0 :(得分:2)

魔术在这两行中:

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

return base.Channel.ReqDDCNetworkStatus(out status);

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

答案 1 :(得分:1)

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