调用wcf-service时出现模拟错误

时间:2011-07-13 09:40:30

标签: wcf

我开发了一个wcf服务。由于它也将由非.NET客户端调用,我使用了basichttpbinding。一些方法需要模拟。这是通过以下方式修改web方法来强制的:

 [OperationBehavior(Impersonation = ImpersonationOption.Required)]

在我的测试服务器上部署服务后,当我调用服务时出现一个奇怪的错误:

  

无法加载文件或程序集'log4net,Version = 1.2.10.0,Culture = neutral,PublicKeyToken = 1b44e1d426115821'或其依赖项之一。未提供所需的模拟级别,或者提供的模拟级别无效。 (来自HRESULT的异常:0x80070542)

我得到此错误的方式与我调用服务的方式无关。当我通过wcfTestClient调用它时,我得到它,当我通过我编写的控制台应用程序调用它时,我得到它。 (我将webservice添加为此应用程序的Web引用,以模拟非.net客户端的行为。)

有什么想法吗?


PS:这是我的webservice的web.config:

  <system.web>
    <compilation targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding closeTimeout="00:15:00" openTimeout="00:15:00" sendTimeout="00:15:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
        <defaultDocument>
            <files>
                <add value="CrmConnectorDiamondData.svc" />
            </files>
        </defaultDocument>
  </system.webServer>
</configuration>

2 个答案:

答案 0 :(得分:3)

WCF客户端必须明确允许模拟。在WCF客户端中,可以通过配置向客户端代理添加行为来完成:

<behaviors>
  <endpointBehaviors>
    <behavior name="myBehavior">
      <clientCredentials>
        <windows allowedImpersonationLevel="Impersonation" />
      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

或在代码中:

proxy.ClientCredentials.Windows.AllowImpersonationLevel = TokenImpersonationLevel.Impersonation;

我希望必须为WcfTestClient配置它,因为默认模拟级别只允许idnetification。

如果是ASMX代理,请确保您是passing your credentials

我的观点是,对于非.NET客户端使用的服务,Windows身份验证不是一个好的选择(特别是如果你的意思是非Windows)。

答案 1 :(得分:0)

看起来log4net库与该模拟级别不兼容。如果删除引用,它将起作用。