2012-04-16 7 views
1

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アドレスを入力すると、予想されるメタデータページが表示されます。

紛失していることが明らかですか?

+0

あなたの質問に直接答えはありませんが、他のApp.ConfigやWeb.ConfigのようにServicesReferences.ClintConfigを変更することができます。 Silverlight .xapファイルは単なるWinZipファイルです。 .ClientConfigを抽出してZipファイルに追加することができます。 WinZip(またはWindows Explorer Zipではなく、他のZipプログラムの1つ)を使用しなければならなかったが、これまでの仕事でこれをすべてやった。メモリからは、Zipパッケージの外にあるファイルを変更してから再度追加する必要がありました。 – MrLane

+0

展開の一環として、インストーラは.ClientConfigを抽出し、正しいエンドポイントアドレスを設定し、それを元に戻します。面白い... –

+0

うん、それはどうやってやったの? – MrLane

答えて

0

sigh濡れたニシンで私を叩く。 WebサービスのHTTPSバインディングはweb.configでコメントアウトされています(すべてのお客様がサーバー上でHTTPSを実行できる/できないとは限らないため、IISがHTTPS用に構成されていない場合にWCFバインディングを使用すると、方法)。

良い夜の睡眠が問題にもたらす可能性のある新鮮な視点と明快さは驚くべきことです。

関連する問題