1

長文で申し訳ありませんが、できるだけ多くの情報を含めたいと思います。そのため、WCF サービスを Silverlight アプリで正しく動作させるために、何日も苦労してきました。私は最初にそれを展開しましたが、すべてがスムーズに実行されていました。

ただし、メソッドの1つを更新した後、それは機能しませんでした。私は SVN を使用して作業を保存していますが、以前のバージョンのプロジェクトに戻って再デプロイしても効果はありませんでした。誰か助けてください:(

VS2012 を使用して Silverlight アプリケーションを実行すると、サービスへのすべての呼び出しが必要に応じて正しく機能し、正しい情報が取得されます。ただし、Silverlight アプリのデプロイ後に同じ呼び出しをトリガーすると、次のエラーのいずれかが表示されます。

 An exception occurred during the operation, making the result invalid.  Check InnerException for exception details.

   at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
   at OrionDashboard.OrionWebService.GetTestDataCompletedEventArgs.get_Result()
   at OrionDashboard.MonthlyOverview.OrionWebService_GetTestDataCompleted(Object sender, GetTestDataCompletedEventArgs e)
   at OrionDashboard.OrionWebService.OrionWebServiceClient.OnGetTestDataCompleted(Object state)

または

[Async_ExceptionOccurred] Arguments: Debugging resource strings are unavailable. Often the key and arguments provide sufficient information to diagnose the problem. See http://go.microsoft.com/fwlink/?linkid=106663&Version=4.0.51204.0&File=System.dll&Key=Async_ExceptionOccurred   at 

残りのエラーは、他のエラー メッセージの onComplete イベント エラーに対応します。

繰り返しますが、これはサーバー上のIISに展開されたときにのみ発生し、更新を再展開した後にのみ発生し始めました

VS2012 に含まれている WCF Storm と WCF Test Client の両方を使用して、展開されたサービスをネットワーク経由でテストしましたが、すべてのコントラクトで問題なくすべてが返されています。

ServiceReferences.ClinetConfig は次のとおりです。

<configuration>
<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="CustomBinding_OrionWebService">
                <binaryMessageEncoding />
                <httpTransport maxReceivedMessageSize="2147483647"
                               maxBufferSize="2147483647" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:53493/OrionWebService.svc" 
                  binding="customBinding" 
                  bindingConfiguration="CustomBinding_OrionWebService"
                  contract="OrionWebService.OrionWebService"
                  name="CustomBinding_OrionWebService" />
    </client>
</system.serviceModel>

サービス プロジェクトを参照したときに自動生成されたものから、これをまったく変更していません。「http://localhost:53493/OrionWebService.svc」という行だったのではないかと思いました。

フィドラーでは、crossdomain.xml と clientaccesspolicy.xml で次のエラーが発生するためです。

[Fiddler] localhost へのソケット接続に失敗しました。ErrorCode: 10061。ターゲット マシンがアクティブに拒否したため、接続できませんでした [::1]:53493

ただし、xapをzipファイルに変更し、ServiceReference.ClientConfigを変更して、サービスを確認したい場合に機能するのと同じサービスアドレスを指すようにしました。たとえば、「http://ServerName/OrionDashboard/OrionWebService.svc」 Silverlight から同じエラーが発生し、2 つのファイルから 404 エラーが発生します。

ここにweb.configがあります:

    <?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <system.web>
        <compilation debug="true"
                     targetFramework="4.0" />
    </system.web>

    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings>
            <customBinding>
                <binding name="OrionDashboard.Web.OrionWebService.customBinding0">
                    <binaryMessageEncoding />
                    <httpTransport />
                </binding>
            </customBinding>
        </bindings>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
                                   multipleSiteBindingsEnabled="true" />
        <services>
            <service name="OrionDashboard.Web.OrionWebService">
                <endpoint address="" 
                          binding="customBinding" 
                          bindingConfiguration="OrionDashboard.Web.OrionWebService.customBinding0"
                          contract="OrionDashboard.Web.OrionWebService" />
                <endpoint address="mex" 
                          binding="mexHttpBinding"
                          contract="IMetadataExchange" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

ServiceReference と同様に、web.config もそのままにしました。そのほとんどの意味がよくわからないからです。しかし、Silverlight アプリを最初に展開したときはそのままにしておいたので、前述のように問題なく動作しました。

  • 問題なくローカルで実行され、サービスはデプロイされたサービスからの正しいデータでも応答するため、DB の問題ではないと思います。

  • サービスは正常に動作しているようです。WCF テスト クライアントまたは WCF Storm アプリから問題は報告されていません。

  • VS2012 では、wcf サービスを公開するときにサービスをクライアントから分離せず、crossdomain.xml または clientaccesspolicy.xml を作成しないため、公開後に手動で追加しました。それが原因である可能性があるかどうかわかりませんか?

私は完全に道に迷っており、これまでに見つけた回避策はすべてうまくいきませんでした。誰かが少なくとも私を正しい方向に向けることができますか?

4

0 に答える 0