0

これはおそらく非常に単純ですが、我慢してください。

単純なコピーアンドペースト手法を使用して、 WCFを使用してSilverlight 5アプリケーションをIISに展開すると、Webサイトを問題なく参照できますが、この192.168.1.3:8099のようなIPアドレスを介してアクセスしようとすると、すべてのサービス呼び出しで次のようなエラーが返されます。これとして:

An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.
  at .....
  at <MyNamespace>.OnGetSomethingFromDataBaseCompleted(Object state)

他のマシンからのWCFサービスを正常にターゲットにできます(192.168.1.3:8099/SomeService.svc)。サービスを呼び出す(そして閉じる)ためのテストコンソールアプリを作成しました。リモートDBServerからデータを正しく取得します。しかし、ブラウザでは何もありません。

192.168.1.3:8099に移動すると、ブラウザからそれを追加し直す必要があります。Fiddlerはこの呼び出しを登録しませんが、localhost:8099からは登録します。

手伝ってくれますか?

これは、私よりも展開の経験が豊富な人にとっては簡単な質問だと思いますが、そうすべきだと思われる場合は、読み進めてください。


だからあなたは=>(プリズム)を読んでいます。

WCFサービスを呼び出すデータベースに接続するSilverlightアプリケーションがあります(Silverlight WCFサービス-VSTemplateとして追加されました)。

このアプリケーションでは、 JeremyLiknessが彼のブログで示唆しているようにPrismを紹介します

また、Webプロキシを使用してViewModelからWCFサービスにアクセスします。

私のプロジェクト構造:

  • WEBプロジェクト
  • SilverlightAppWithShell
  • ModuleA
  • ModuleB
  • CommonProject

デプロイメントディレクトリ構造:

C:\ inetpub \ wwwroot \ MyAppFolder(IISUsersにはaccessToItがあります)

  • 。\bin\ AllDlls
  • 。\ClientBin\ AllXapFiles(上記のすべてのプロジェクトのXAPファイル)
  • 。\Services\ All*.csファイルはサービス運用契約を定義します
  • 。\Web.config
  • 。\TestPage.html
  • 。\TestPage.aspx
  • 。\Silverlight.js
  • 。\AllServices*.scvファイル

最後になりましたが、

  • 。\clientaccesspolicy.xml

その中にこのコードがあります:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>"
      </allow-from>
      <grant-to>
        <resource path="/Services" include-subpaths="true"/><!--I tried with App_Code here when renaming Services dir to App_Code with the same wain result-->
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

読んでくれてありがとう

4

1 に答える 1

0

これは、Carlos Figueiraからのこの投稿に続いて、私がやることになり、問題を解決したことです。Silverlight 5でより良い解決策があるかどうかはわかりませんが、それは私にとってはうまくいきます。

public static void UpdateMyServiceAddress(WebServiceMyProxies.MyServiceClient client)
        {
            client.Endpoint.Address = UpdateServiceAddress(client.Endpoint.Address.Uri.ToString());
        }

private static System.ServiceModel.EndpointAddress UpdateServiceAddress(string originalAddress)
        {
            int svcIndex = originalAddress.IndexOf(".svc");
            int serviceNameIndex = originalAddress.LastIndexOf('/', svcIndex);
            string serviceName = originalAddress.Substring(serviceNameIndex + 1);

            string baseAddress = Application.Current.Host.Source.ToString();
            baseAddress = baseAddress.Substring(0, baseAddress.LastIndexOf('/')); // removing /App.xap
            baseAddress = baseAddress.Substring(0, baseAddress.LastIndexOf('/')); // removing /ClientBin

            return new System.ServiceModel.EndpointAddress(String.Format("{0}/{1}/{2}", baseAddress,"Services", serviceName));
        }
于 2013-01-26T01:20:11.273 に答える