Удаленный сервер возвратил ошибку: NotFound - PullRequest
7 голосов
/ 03 марта 2011

У меня есть приложение Silverlight, которое использует службу WCF в моем приложении asp.net. Приложение Silverlight сохраняет «рисунки» в виде чернильных штрихов.Эти штрихи имеют вид xaml (который может быть довольно большим), который я преобразовываю в строку и отправляю в службу для сохранения строки на сервере sql.(В основном это тот же тип вещей, что и в этом приложении http://msdn.microsoft.com/en-us/magazine/cc721604.aspx).

Это работает, и я вижу, что мой метод обслуживания срабатывает, когда чертеж относительно мал, но если рисунок становитсяк большой я получаю эту большую ошибку, и точка останова метода служб никогда не попадает. Кажется, что я пересекаю порог размера, но я не могу понять, прав ли я или что изменить, чтобы решить проблему.

Я отправил Google и 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 ]

7 голосов
/ 03 марта 2011

Попробуйте увеличить читательQuotas - добавьте этот элемент внутрь binding элемента

<readerQuotas maxStringContentLength="2147483647" />

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

0 голосов
/ 03 марта 2011

Вы пробовали включить Отслеживание WCF ?Я не уверен, работает ли это с Silverlight (учитывая, что Silverlight имеет множество ограничений безопасности с точки зрения локального жесткого диска), поэтому вам может потребоваться настроить простой клиент без silverlight и воспроизводить вызов с включенной диагностикой.

РЕДАКТИРОВАТЬ: Или, может быть maxArrayLength член читателяQuotas ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...