我在以下情况下苦苦挣扎(这是大图):
我的 Web 项目中有一个支持 WCF Silverlight 的服务(基于 DomainService 类)。该服务旨在由 Silverlight 5 客户端以及非 Silverlight 消费者调用。
该服务在地址“http://localhost/mywebapproot/Services/MailService.svc”处显示 WSDL 信息,因此它可以被 Web 项目中的任何客户端发现和实现(这很好)。
以下是症状:
- 任何 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>
非常感谢您的帮助!克里斯。