我目前在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();
答案 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后,在模拟下运行的服务方法不应再次这样做。