我必须使用COM Visible程序集使用Windows服务中托管的WCF服务。
我有一个在Windows服务中托管的WCF服务,我必须在COM Visible程序集中使用该服务,我已经创建了一个COM +应用程序并添加了一个服务引用。以下是app.config
。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="TcpEndpoint" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false"
transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://serverMachine:9600/DocumentsWcfService/Tcp"
binding="netTcpBinding" bindingConfiguration="TcpEndpoint"
contract="MysWcfService.IMysWcfService" name="TcpEndpoint" />
</client>
</system.serviceModel>
</configuration>
当我在经典ASP项目中使用此程序集并调用初始化服务的方法时,我得到如下错误。但是当我在Console应用程序中引用相同的WCF服务时,它工作正常。在COM可见应用程序中使用是否需要进行任何特定更改。
在ServiceModel客户端配置部分中找不到引用合同“MyWcfService.IMysWcfService”的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素
答案 0 :(得分:2)
COM服务器不读取正常的配置文件,因此您需要通过代码执行此操作或使用以下技巧:
(您的COM服务器必须是.exe
)
在文件夹中创建名为Application.manifest
的文件。该文件必须包含:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" />
将配置文件放在同一个文件夹中。请注意,配置文件必须具有确切的名称Application.config
,而不是“myapp.exe.config”
现在配置文件的工作方式与控制台应用程序中的相同。
答案 1 :(得分:1)
尝试使用
读取配置ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "MysWcfService.dll.config";
configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
然后你可以尝试阅读一些wcf配置部分并以编程方式配置你的主机(example):
ServicesSection servicesSection = (ServicesSection)configuration.GetSection("system.serviceModel/services");
ServiceEndpointElement endpoint = servicesSection.Services[0].Endpoints[0];
//use endpoint.Address
//use endpoint.Binding
//use endpoint.Contract