2011-09-08 14 views
2

WSEを使用してasmx Webサービスに接続する.NET 2.0 Forms Appクライアントがあります。レガシーWSEクライアントとWCFサービスの接続...クライアントへの変更なし

サービスをWCFにアップグレードし、VS 2010と.NET 4を利用したいと思いますが、既存の(法人)顧客にクライアントソフトウェア/フレームワークなどの更新を強制することはできません。下位互換性を維持できるかどうかは、サービスをアップグレードする唯一の方法です。

顧客側ではapp.configを更新できますが、実行可能ファイルでは更新できません。つまり、新しいサービス参照を追加することはできません。

クライアントに変更を加えることなく、クライアントアプリケーションからの呼び出しを受け入れるようにWCFサービスを設定しようとして失敗しました。私はこれが完了することさえ疑う。もちろん、クライアントで新しい参照を追加すると機能しますが、既存の参照を使用して新しいサービスで「偽造」しようとしません。

サービスエンドでの設定は次のようになります。

<bindings> 
    <basicHttpBinding> 
    <binding name="OnePointOneBinding" bypassProxyOnLocal="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
     maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration="ServiceBehaviour" name="xyz.Services.xyzService"> 
    <endpoint binding="basicHttpBinding" bindingConfiguration="OnePointOneBinding" 
     name="BasicBindingSvc" contract="xyz.Services.IxyzService" /> 
    </service> 
</services> 

我々が取得しているエラーは次のとおりです。

アクションとメッセージ「http://webservices.xyz.co.uk/ EndpointDispatcherでContractFilterの不一致が原因で、xyz/DoTest 'を受信者で処理できません。これは、契約の不一致(送信者と受信者の間の不一致)または送信者と受信者の間のバインディング/セキュリティの不一致のいずれかが原因である可能性があります。送信者と受信者が同じ契約と同じバインディング(セキュリティ要件、たとえばメッセージ、トランスポート、なしなど)を持っていることを確認します。

任意の入力喜んで上記のため

+0

WSE設定を表示していないため、ほとんど手助けを得ることができませんでした。 –

答えて

0

一部WSE仕様受信:クライアントのapp.configから

<policies xmlns="http://schemas.microsoft.com/wse/2005/06/policy"> 
    <extensions> 
    <extension name="usernameOverTransportSecurity" type="Microsoft.Web.Services3.Design.UsernameOverTransportAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    <extension name="requireActionHeader" type="Microsoft.Web.Services3.Design.RequireActionHeaderAssertion, Microsoft.Web.Services3, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
    </extensions> 
    <policy name="usernameTokenSecurity"> 
    <usernameOverTransportSecurity /> 
    <requireActionHeader /> 
    </policy> 
</policies> 

wse3PolicyCache.configから

<microsoft.web.services3> 
    <security> 
     <!-- Specifies the time buffer used by WSE to determine when a SOAP message is valid. --> 
     <timeToleranceInSeconds value="7200" /> 
     <!-- Defines the default number of seconds that a SOAP message is valid after its creation. --> 
     <defaultTtlInSeconds value="300" /> 
    </security> 
    <policy fileName="wse3policyCache.config" /> 
</microsoft.web.services3> 

を私は他に関連することができない...

EDIT:

だから私はとき、いくつかの掘削を行なったし、WCFサービスのWSDLは、それhttp://x.y.x/IService作り、名前空間に追加されている(私は「IService」という名前のだ)インターフェイスの名前が含まれていることがわかっクライアントはhttp://x.y.z/productnameを予期しています。そこで、インターフェースの名前を 'productname'に変更し、名前空間が正しいようになりました。これにより、次の(新しい)エラーが発生しました。

操作 'Authorise2'に対する要求メッセージの本体を逆シリアル化する際にエラーが発生しました。 OperationFormatterが無効なMessage本体を検出しました。 名前が「Authorise2」で、名前空間が「http://x.z.z」のノードタイプ「Element」が必要です。 見つかったノードタイプ名を持つ '要素' 'Authorise2' と名前空間 'HTTP://x.z.z/productname'

インタフェースは、次のシグネチャがあります。

【のServiceContract(名前空間=「HTTP://x.y。Z ")] パブリックインターフェイスPRODUCTNAME { [OperationContract] AuthorisationDetails Authorise2(文字列名、文字列のパスワード); }?点に

'PRODUCTNAME' 拡張子が追加されたどのように

より、どのようにすることができ

+0

これで、WCFサービスのWSDLにインターフェイスの名前が含まれていました'IService'という名前の)名前空間に追加され、クライアントがhttp:// xyz/productnameを予期しているときにhttp:// xyx/IServiceになります。 – Visionary