Named-Pipes客户端无法启动

时间:2012-02-03 23:20:12

标签: wcf wcf-binding wcf-security wcf-client

我有一个类库,它应该与现有的命名管道服务器建立连接。我得到的错误是:

  

无法在ServiceModel客户端配置部分中找到名称为“internal”且收起“SelectedStudentReference.ISelectedStudent”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。

这是来自dll.config的xml:

<system.serviceModel>
    <bindings>            
        <netNamedPipeBinding>
            <binding name="internal" closeTimeout="00:01:00" openTimeout="00:01:00"
                receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false"
                transferMode="Buffered" transactionProtocol="OleTransactions"
                hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
                maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="Transport">
                    <transport protectionLevel="EncryptAndSign" />
                </security>
            </binding>
        </netNamedPipeBinding>
    </bindings>
    <client>
        <endpoint address="net.pipe://localhost/SelectedStudent" binding="netNamedPipeBinding"
            bindingConfiguration="internal" contract="SelectedStudentReference.ISelectedStudent"
            name="internal">
            <identity>
                <userPrincipalName value="name@company.org" />
            </identity>
        </endpoint>            
    </client>
</system.serviceModel>

这是我用来实例化客户端的代码,以及它抛出错误的地方:

using AwardManager.SelectedStudentReference;

if (_client == null) _client = new SelectedStudentClient("internal");

我知道服务器正在运行,错误消息只提到客户端故障。从类库中执行此操作是否有任何问题?安装程序没有使用dll复制.config,我手动完成,所以我不确定.dll是否正在关注.config。

这是一个已注册的COM-visible dll,它由另一个进程实例化并调用。我无法将此system.serviceModel添加到该其他进程的.config中。

我可以在代码中构建客户端,如果可行的话,我有一些如何实现的例子。

我还可以使用userPrincipleName的一些帮助。它使用我的凭据似乎不正确。它不应该指定用户的凭据或一些通用凭据吗?它甚至需要包含在客户端配置中吗?

由于

1 个答案:

答案 0 :(得分:0)

这个东西需要在托管你的DLL的exe的配置中。 DLL没有独立的配置 - 或者除非你做一些自定义的事情,否则至少.NET不会读取它。

如果您无法修改托管EXE配置,则可能需要在代码中构建此配置。