8

ログインするための WCF 呼び出しを行うことから始まるアプリケーションを作成しました。サービス参照を使用してクライアント コードを生成しました。サービスがネットワークにローカルにインストールされているクライアントでは問題なく機能します。ただし、これらの同じサービスが企業の力によって制御される SaaS 環境もあります。saas環境で、ログインに失敗しているとの連絡がありました。Fiddler を使用して調査したところ、ログインへのサービス呼び出しが HTML を返していることがわかりました。具体的には、.asmx から使用可能なすべてのメソッドをリストした Web ページです。

SaaS 環境には、ここで問題を引き起こしている可能性のある小さな癖が 1 つありますが、これが問題であることを確認する方法も、問題である場合の解決方法もわかりません。奇妙な点は、サーバーが呼び出しをリダイレクト (302) することです。

クライアントコード:

    client.Endpoint.Address = new EndpointAddress("http://" + settings.MyURL + "/myProduct/webservices/webapi.asmx");
    client.DoLogin(ユーザー名、パスワード);

リダイレクト前にサーバーに送信される生データには、s:Envelope XML タグが含まれています。リダイレクトされたサーバーに送信するときに、s:Envelope XML タグが欠落していることに注意してください。

    GET https://www.myurl.com/myProduct/webservices/webapi.asmx HTTP/1.1
    コンテンツ タイプ: テキスト/xml; 文字セット=utf-8
    VsDebuggerCausalityData: uIDPo7TgjY1gCLFLu6UXF8SWAoEAAAAAQxHTAupeAkWz2p2l3jFASiUPHh+L/1xNpTd0YqI2o+wACQAA
    SOAPAction: " http://Interfaces.myProduct.myCompany.com/DoLogin "
Accept-Encoding: gzip、デフレート
    ホスト: www.gotimeforce2.com
    接続: キープアライブ

どうすればこのばかげたことを機能させることができますか?

編集:古い ASMX/wsdl.exe/web-reference ではなく、WCF/svcutil.exe/service-reference を使用していることは注目に値します。そうでなければ、このトピックの将来の読者にとって、Raj によって提案された wsdl ソリューションは優れたソリューションでした。この問題が発生し、wsdl 手法を使用している場合は、Raj の優れた回答を参照してください。

Edit2: WCF と 302 について一連の調査を行った後、それらがうまく連携していないように思えます。また、状況を処理するために WCF API カスタム コードを提供する簡単な方法もないようです。私はサーバーを制御できないため、サーバーを吸い上げて、Web 参照として API を再生成し、Raj のソリューションを使用しています。

Edit3:問題の原因が理解されたので、解決策をよりよく反映するようにタイトルを更新しました。元のタイトル: WCF がリダイレクトに s:Envelope を含めないのはなぜですか?

4

1 に答える 1