远程服务器返回错误:NotFound

时间:2011-03-03 19:34:36

标签: silverlight wcf

我有一个在我的asp.net应用程序中使用WCF服务的Silverlight应用程序.silverlight应用程序以墨水笔划的形式保存“图纸”。这些笔划是xaml(可能有点大)的形式,我将其转换为字符串并发送到服务以将字符串保存到sql server。 (基本上与此应用http://msdn.microsoft.com/en-us/magazine/cc721604.aspx相同类型的东西)。

这有效,我可以看到我的服务方法在绘图相对较小时被击中,但如果绘图变大,我会得到这个很大的错误,并且服务方法断点永远不会被击中。似乎我正在通过一个大小阈值,但我无法弄清楚我是否正确或要改变什么来解决问题。

我已经搜索谷歌和SO没有成功,所以任何帮助将不胜感激。提前致谢。

我的服务:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class DrawingService: IDrawingService
{
    #region IDrawingService Members
    public bool SaveEvalAreaDrawing(int EvalAreaId, string xmlToSave)
    {
        return true;
    }

    public bool SaveEvalItemDrawing(int EvalItemId, string xmlToSave)
    {
        return true;
    }

    public string GetEvalAreaDrawing(int EvalAreaId, string xmlToSave)
    {

        return "you got the eval drawing!";
    }

    public string GetEvalItemDrawing(int EvalItemId, string xmlToSave)
    {

        return "you got the eval item drawing!";
    }

    #endregion
}

我的asp.net应用程序,服务web.config

<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="MyNameSpace.Services.DrawingServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <customBinding>
    <binding name="customBinding0">
      <binaryMessageEncoding />
      <httpTransport>
        <extendedProtectionPolicy policyEnforcement="Never" />
      </httpTransport>
    </binding>
  </customBinding>
  <wsHttpBinding>
    <binding name="wsPlainBinding" maxBufferPoolSize="2147483647"
      maxReceivedMessageSize="2147483647">
      <security mode="None">
        <transport clientCredentialType="None">
          <extendedProtectionPolicy policyEnforcement="Never" />
        </transport>
        <message clientCredentialType="None" negotiateServiceCredential="false"
          establishSecurityContext="false" />
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
  <service behaviorConfiguration="HSD.ECERS.Services.DrawingServiceBehavior"
    name="HSD.ECERS.Services.DrawingService">
    <endpoint address="Services" binding="wsHttpBinding" bindingConfiguration="wsPlainBinding"
      name="wsPlainHttp" contract="HSD.ECERS.Services.IDrawingService" />
    <endpoint address="mex" binding="mexHttpBinding" name="wsdl"
      contract="IMetadataExchange" />
  </service>
</services>

ServiceReferences.ClientConfig

<configuration>
<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="wsPlainHttp">
                <textMessageEncoding messageVersion="Default" writeEncoding="utf-8" />
                <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
                    <extendedProtectionPolicy policyEnforcement="Never" />
                </httpTransport>
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:41594/Services/DrawingService.svc/Services"
            binding="customBinding" bindingConfiguration="wsPlainHttp"
            contract="EvalDrawingService.IDrawingService" name="wsPlainHttp" />
    </client>
</system.serviceModel>
</configuration>

VS显示错误

public bool EndSaveEvalAreaDrawing(System.IAsyncResult result) {
            object[] _args = new object[0];
            bool _result = ((bool)(base.EndInvoke("SaveEvalAreaDrawing", _args, result))); // Here is where is popping up
            return _result;
        }

异常

{System.ServiceModel.CommunicationException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
   at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
   at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
   --- End of inner exception stack trace ---
   at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
   at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
   --- End of inner exception stack trace ---
   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
   at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
   at EvaluaionAncillaryControl.EvalDrawingService.DrawingServiceClient.DrawingServiceClientChannel.EndSaveEvalAreaDrawing(IAsyncResult result)
   at EvaluaionAncillaryControl.EvalDrawingService.DrawingServiceClient.EvaluaionAncillaryControl.EvalDrawingService.IDrawingService.EndSaveEvalAreaDrawing(IAsyncResult result)
   at EvaluaionAncillaryControl.EvalDrawingService.DrawingServiceClient.OnEndSaveEvalAreaDrawing(IAsyncResult result)
   at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)}

2 个答案:

答案 0 :(得分:7)

尝试增加readerQuotas - 在binding元素

中添加此元素
<readerQuotas maxStringContentLength="2147483647" />

http://msdn.microsoft.com/en-us/library/ms731325.aspx

答案 1 :(得分:0)

您是否尝试启用WCF Tracing?我不确定它是否适用于Silverlight(鉴于Silverlight在本地硬盘方面存在很多安全限制),因此您可能需要设置一个简单的无Silverlight客户端并在启用诊断时重现该调用。

编辑:或者,可能是readerQuotas的maxArrayLength成员......