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
{
}

邮件服务接口

[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