1

我必须使用 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 项目中使用此程序集并调用初始化服务的方法时,我收到如下错误。但是当我在控制台应用程序中引用相同的 WCF 服务时,它工作正常。在 COM 可见应用程序中是否需要使用任何特定更改。

在 ServiceModel 客户端配置部分中找不到引用合同“MyWcfService.IMysWcfService”的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素

4

2 回答 2

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”

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

于 2013-10-03T15:29:47.423 回答
1

尝试读取配置

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "MysWcfService.dll.config";
configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);

然后您可以尝试阅读一些 wcf 配置部分并以编程方式配置您的主机(示例):

    ServicesSection servicesSection = (ServicesSection)configuration.GetSection("system.serviceModel/services");
    ServiceEndpointElement endpoint = servicesSection.Services[0].Endpoints[0];
    //use endpoint.Address                                                                                            
    //use endpoint.Binding
    //use endpoint.Contract
于 2013-10-03T22:48:06.490 回答