2011-07-13 10 views
2

私はwcfサービスを開発しました。非ネットクライアントからも呼び出されるので、basichttpbindingを使用しました。これらのメソッドの中には、偽装が必要なものがあります。これは、とのwebMethodsを飾るによって強制されています。私は、我々のテストサーバー上でサービスを展開した後wcf-serviceを呼び出すときの偽装エラー

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 

私がサービスを呼び出すときに、私は奇妙なエラーが表示されます。

は、ファイルまたはアセンブリをロードできませんでした ' log4net、バージョン= 1.2.10.0、カルチャ=ニュートラル、PublicKeyToken = 1b44e1d426115821 'またはその依存関係の1つ。必要な偽装レベルが指定されていないか、提供されている偽装レベルが無効です。 (HRESULTからの例外:0x80070542)

私がサービスを呼び出す方法とは無関係に、このエラーが発生します。私はwcfTestClient経由で呼び出すとそれを取得し、私が書いたコンソールアプリケーション経由で呼び出すとそれを取得します。 (私は非ネットクライアントの動作をシミュレートするこのアプリケーションへのWeb参照としてwebserviceを追加しました)

アイデア?


PS:

<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> 

答えて

0

はlog4netのライブラリのように見える はその偽装レベルでの互換性のないです:ここに私のWebサービスのweb.configファイルです。あなたが参照を削除する場合、それは動作します。

+0

しかし、私はそのアセンブリが必要です。私はサーバ上で何が起こるかをログに記録しなければならず、log4netはそのための "私たちの"ライブラリです。 – Jerma

+0

そのアセンブリを使用する必要がある場合は、別の認証方法を使用することをおすすめします。 httpsでの基本認証は、私が個人的に使いたいものです。 –

3

よくWCFクライアントでは、偽装を明示的に許可する必要があります。

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

やコードに:私は、既定の偽装レベルができますので、これはWcfTestClientのために設定する必要があることを期待し

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

WCFクライアントでは、いずれの構成を介してクライアントプロキシに追加する行動によって行われます唯一のidnetification。

ASMXプロキシの場合は、passing your credentialsであることを確認してください。

私の意見は、Windows認証が非.NETクライアントによって使用されるサービス(特に非Windowsを意味する場合)には適していないということです。

+0

それが助けになりました。この動作をwcftestclientのclient.configに追加した後、それは機能しました。しかし、今私は別の奇妙な行動をしています。私がサービスをwcftestclient経由で呼び出すと(偽装を明示的に許可せずに)、上記のエラーでクラッシュします。そしてその瞬間から、私は再びサービスを再開するまで、コンソールアプリケーション経由で呼び出されるとクラッシュします...それはどのように可能ですか? – Jerma

関連する問題