通过DLL从Windows服务调用WCF服务

时间:2015-06-08 11:15:33

标签: c# wcf dll

基本上我的情况是这样的:

Windows Service --Calls--> MethodinDLL --Calls--> WCFService.

服务配置手动写在DLL端,在配置的Windows服务端写 - 如果DLL端和Windows服务端的WCF参数匹配,我感兴趣。以下更详细说明。

我会告诉你我的设置。我从DLL调用WCF服务。在DLL 中有代码,它调用WCF服务,如:

//Inside DLL
BasicHttpBinding binding = new BasicHttpBinding(SecurityMode.None);
EndpointAddress epa = new EndpointAddress("http://localhost:16593/FreeSpaceDatabase.svc");

YourServiceClient proxy = new YourServiceClient(binding, epa);

我可以手动提供参数。

现在,我有一个实际引用此DLL的Windows服务,并使用DLL(或通过DLL)调用WCF服务。 (对WCF服务的调用位于DLL中 - Windows服务没有调用WCF服务的方法)。

但我还是被迫在 Windows服务端添加

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IFreeSpaceDatabase" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:16593/FreeSpaceDatabase.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFreeSpaceDatabase"
                contract="ServiceReference1.IFreeSpaceDatabase" name="BasicHttpBinding_IFreeSpaceDatabase" />
        </client>
    </system.serviceModel>
</configuration>

我的问题是如果我在DLL端的代码中指定的EndpointAddress("http://localhost:16593/FreeSpaceDatabase.svc") (如我的问题开头):

  EndpointAddress epa = new EndpointAddress("http://localhost:16593/FreeSpaceDatabase.svc");

Windows服务AppConfig文件中指定的端点地址不同?是允许的吗?或者它们应该始终相同?

1 个答案:

答案 0 :(得分:0)

您可以从配置中删除此地址,它应该可以使用。我在我的代码中有这些设置(绑定和端点),只有这个在我的配置中:

<system.serviceModel>
    <bindings />
    <client />
</system.serviceModel>