System.Data.OracleClient上的WCF模拟级别错误

时间:2010-11-30 03:56:37

标签: wcf impersonation

我目前在IIS7中运行了一个WCF服务,并且我已经在每个公共Web方法上添加了模拟,具有以下内容:

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public void TestMethod(){}

当我从我的测试客户端应用程序调用此方法时,我收到以下错误:

无法加载文件或程序集'System.Data.OracleClient,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = waeraewrar'或其依赖项之一。未提供所需的模拟级别,或者提供的模拟级别无效。

我目前正在使用Microsoft Enterprise Library 3.1和.Net 4.0。

示例代码:

WcfService client = new WcfService();
client.TestMethod();

2 个答案:

答案 0 :(得分:1)

尝试配置客户端以允许模拟模拟。例如:

<system.serviceModel>
    <client>
      <endpoint address="http://xxxxx/Services/xxService.svc"
                binding="wsHttpBinding"
                contract="IServiceContract"
                behaviorConfiguration = "ImpersonationBehavior" />
    </client>
      <behaviors>
          <endpointBehaviors>
               <behavior name="ImpersonationBehavior">
                   <clientCredentials>
                       <windows allowedImpersonationLevel = "Impersonation" />
                   </clientCredentials>
               </behavior>
          <endpointBehaviors>
       </behaviors>
</system.serviceModel>

有关假冒和委派的更多信息,请参阅this article

答案 1 :(得分:0)

错误消息表明问题在于模拟用户无法访问文件系统中的System.Data.OracleClient程序集DLL,因此无法加载它。

是否可以使System.Data.OracleClient程序集首先由需要模拟的服务方法之外的代码加载...即使用IIS工作进程标识运行的代码。例如,在您的服务实例构造函数中。

将程序集加载到服务的AppDomain后,在模拟下运行的服务方法不应再次这样做。