WCFサービスを使用し、ASP.NET WebフォームでホストされているSilverlightアプリケーションを継承しました。アプリケーションはHTTPとHTTPS上で動作する必要があり、顧客自身のサーバーにインストールされます。最初にクライアントコードは、ローカルにホストされているサービスをポイントするAdd Service Referenceを使用して生成されていたので、ServicesReferences.ClientConfigには明らかにlocalhostへのハードコーディングされた参照が含まれています。クライアントが使用するエンドポイントアドレスをプログラムで設定します。SilverlightをWCFにプログラムで接続する
var binding = new BasicHttpBinding
{
MaxBufferSize = 2147483647,
MaxReceivedMessageSize = 2147483647,
};
binding.Security.Mode = HtmlPage.Document.DocumentUri.Scheme.StartsWith("https")
? BasicHttpSecurityMode.Transport
: BasicHttpSecurityMode.None;
var documentUri = HtmlPage.Document.DocumentUri;
var builder = new UriBuilder(
documentUri.Scheme,
documentUri.Host,
documentUri.Port,
documentUri.LocalPath.Replace("hostpage.aspx", "MyService.svc"));
var client = new CustomerDetailServicesClient(binding, new EndpointAddress(builder.Uri));
client.ChannelFactory.Faulted += OnChannelFactoryFaulted;
client.DoSomething();
と私はHTTPを使用する場合、これはOK働きながら、WCFサービスへの呼び出しごとに404エラーで失敗するHTTPS経由でアクセスしようとします。
私のコードは、現在あります。 Fiddlerを使用すると、URIスキームだけが変更されていることがわかります。サービスのHTTPSアドレスを入力すると、予想されるメタデータページが表示されます。
紛失していることが明らかですか?
あなたの質問に直接答えはありませんが、他のApp.ConfigやWeb.ConfigのようにServicesReferences.ClintConfigを変更することができます。 Silverlight .xapファイルは単なるWinZipファイルです。 .ClientConfigを抽出してZipファイルに追加することができます。 WinZip(またはWindows Explorer Zipではなく、他のZipプログラムの1つ)を使用しなければならなかったが、これまでの仕事でこれをすべてやった。メモリからは、Zipパッケージの外にあるファイルを変更してから再度追加する必要がありました。 – MrLane
展開の一環として、インストーラは.ClientConfigを抽出し、正しいエンドポイントアドレスを設定し、それを元に戻します。面白い... –
うん、それはどうやってやったの? – MrLane