在Com可见程序集中使用WCF服务

时间:2013-10-03 15:12:23

标签: wcf asp-classic com+

我必须使用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”的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素

2 个答案:

答案 0 :(得分:2)

COM服务器不读取正常的配置文件,因此您需要通过代码执行此操作或使用以下技巧:

(您的COM服务器必须是.exe

  1. 转到dcomcnfg并创建COM +应用程序
  2. 在COM +应用程序中,有一个“应用程序根目录”设置。输入.exe所在的文件夹
  3. 将您的com对象添加到COM +应用程序
  4. 在文件夹中创建名为Application.manifest的文件。该文件必须包含:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" />

  5. 将配置文件放在同一个文件夹中。请注意,配置文件必须具有确切的名称Application.config,而不是“myapp.exe.config”

  6. 现在配置文件的工作方式与控制台应用程序中的相同。

答案 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