1

Silverlight アプリケーションから (私が開発した) WCF Web サービスを呼び出そうとしています。何らかの理由で、Silverlight アプリはサービスに対して http soap 呼び出しを行いません。これは、Fiddler を使用してすべての http トラフィックをスニッフィングしているため (ローカルホストの呼び出しではないため)、わかっています。

これは、WCF に関連するサーバーでの私の構成です。

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
        <service behaviorConfiguration="ServiceBehavior" name="Service">
            <endpoint address="" binding="basicHttpBinding" contract="Service"/>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
</system.serviceModel>

そして、Silverlight アプリの ServiceReferences.ClientConfig ファイル (ベータ 2 を使用しています):

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_Service" maxBufferSize="65536"
                maxReceivedMessageSize="65536">
                <security mode="None" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://itlabws2003/Service.svc" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpBinding_Service" contract="Silverlight_organigram.DataService.Service"
            name="BasicHttpBinding_Service" />
    </client>
</system.serviceModel>

これは、サービスを呼び出す Silverlight メソッドです。完全性のためにメソッド全体を貼り付けます。ラムダは、呼び出しを同期させるためのものです。デバッグし、client.GetPersonsAsync() の行の後に、Fiddler にメッセージが表示されません。サーバ。

    public static List<Person> GetPersonsFromDatabase()
    {
        List<Person> persons = new List<Person>();

        ServiceClient client = new ServiceClient();

        ManualResetEvent eventGetPersons = new ManualResetEvent(false);

        client.GetPersonsCompleted += new EventHandler<GetPersonsCompletedEventArgs>(delegate(object sender, GetPersonsCompletedEventArgs e)
            {
                foreach (DTOperson dtoPerson in e.Result)
                {
                    persons.Add(loadFromDto(dtoPerson));
                }
                eventGetPersons.Set();
            });

        client.GetPersonsAsync();
        eventGetPersons.WaitOne();

        return persons;
    }

これを修正する方法について誰か提案がありますか?

4

3 に答える 3

1

Silverlight アプリケーションが、呼び出したい Web サービスを公開しているドメインと同じドメインでホストされていない場合、クロスドメインの制限が適用されます。

Silverlight アプリケーションを Web サービス以外の別のドメインでホストする場合は、この投稿を参照して、クロス ドメイン定義ファイルを用意するか、代わりに中間の「プロキシ」を作成することをお勧めします。

于 2008-10-09T08:57:25.557 に答える
0

100%確実ではありませんが、VistaまたはServer 2008で実行している場合は、http.sysでユーザーアクセス制御の問題が発生している可能性があります。

したがって、VistaおよびWin2k8サーバーでは、高い特権アカウントで実行している場合にのみHttpListenerがリッスンします。実際、私の経験から、ローカル管理者グループに自分を追加しても、この問題が発生する可能性があります。

いずれの場合も、右クリックして管理者としてrunasを使用してVistaでVisualStudioを起動してみてください。それで問題が解決するかどうかを確認してください。もしそうなら、あなたは良いですが....

理想的にはhttpcfgを実行する必要があります

例:httpcfg set urlacl -u http:// itlabws2003 -a D:(A ;; GX ;;; yoursid

sid =実行しているアカウントのセキュリティ識別子。ここで見つけることができます:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList

まだわからない場合、またはBUILTIN \ Administratorsに自分を追加できる可能性がある場合は、sidを見つけて、コマンドラインからそのsidを指定してhttpcfgを再度実行します。

ユーザーアクセス制御、Vista、およびHttp.sysは、これらすべてを引き起こします...これが実際に発生している問題である場合。よくわかりませんが、試してみる価値があるかもしれません

于 2008-09-26T20:13:29.970 に答える
0

ファイルシステムから実行することはありませんか?ローカル マシンで Silverlight アプリケーションを提供していて、VS Web サーバーまたは IIS を使用していない場合、セキュリティ上の理由から HTTP 呼び出しを行うことはできません。同様に、Web サーバーからロードしている場合は、ローカル リソースにアクセスできません。

また、Nikhil の Web 開発ヘルパーhttp://www.nikhilk.net/ASPNETDevHelperTool.aspxは、ローカル トラフィックも表示されるため、Fiddler よりも便利であることがわかりました。この場合。

于 2008-09-26T16:48:22.413 に答える