1

次のシナリオに苦労しています(ここに全体像があります):

Web プロジェクトに WCF Silverlight 対応サービス (DomainService クラスに基づく) があります。このサービスは、Silverlight 5 クライアントと、Silverlight 以外のコンシューマーによって呼び出されるように設計されています。

このサービスは、アドレス「http://localhost/mywebapproot/Services/MailService.svc」に WSDL 情報を表示するため、Web プロジェクト内の任意のクライアントが検出して実装できます (これは問題ありません)。

症状は次のとおりです。

  1. どの Silverlight クライアントからもサービスを呼び出すことができません (ここに問題があります!) 返されるエラーは、"リモート サーバーが例外を返しました: 見つかりません" です。Web.Config でサービスの名前を変更すると (たとえば、MyCompany.Web.Services.MailService を MailService に変更するとします)、サービスは任意の Silverlight クライアントから呼び出せるようになりますが、その時点でサービスは検出できなくなります。

includeExceptionDetailInFaults を True に設定し、Fiddler/HTTPDebuggerPro でサービスを検査しようとしましたが、例外に関する詳細情報は得られませんでした。この構成では、何らかの理由で Silverlight クライアントがその場で .SVC ファイルを作成できないようです。

実装は次のとおりです。

MailService.svcの実装 <%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.Web.Services.MailService" CodeBehind="MailService.svc.cs" %>

MailService.svc.cs の実装

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public sealed partial class MailService : DomainService, IMailService
{
}

IMailService インターフェイス

[ServiceContract(ConfigurationName = "MyCompany.Web.Services.IMailService")]
public interface IMailService
{
   //Some public methods flagged as [OperationContract] go here
}

Web.Config の実装

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Secure_Behavior_Configuration">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <bindings>
        <basicHttpBinding>
            <binding name="Public_MailService_BasicHttpBinding" transferMode="Streamed"
                        maxBufferSize="2147483647"
                        maxReceivedMessageSize="2147483647"
                        maxBufferPoolSize="2147483647">

                <readerQuotas maxArrayLength="21400000" maxStringContentLength="21400000" maxBytesPerRead="21400000"/>
                <security mode="None"/>
            </binding>
        </basicHttpBinding>
      <services>
        <service name="MyCompany.Web.Services.MailService" behaviorConfiguration="Secure_Behavior_Configuration">
            <endpoint
                address="" 
                binding="basicHttpBinding" 
                bindingConfiguration="Public_MailService_BasicHttpBinding"
                contract="MyCompany.Web.Services.IMailService" />
            <endpoint
                address=""
                binding="basicHttpBinding"
                bindingConfiguration="Secure_MailService_BasicHttpBinding"
                contract="MyCompany.Web.Services.IMailService" />
            <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
        </service>
    </services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>

助けてくれてありがとう!クリス。

4

0 に答える 0