【问题标题】:Silverlight WCF throwing The remote server returned an error: NotFoundSilverlight WCF 抛出远程服务器返回错误:NotFound
【发布时间】:2013-04-09 22:20:47
【问题描述】:

我试图弄清楚为什么会发生这种情况。超级诡异的

以下是我的确切电话。每当我在车辆数据合同末尾添加那个额外的数据成员时,我都会得到远程服务器返回一个错误:NotFound。当调用 pick.SaveVehiclesAsync(infoKey, data);

从 Silverlight 一侧

public void SaveVehicles(InfoKey infoKey, ObservableCollection<VehicleFullInfoModel> vehicleFullInfoCollection, EventHandler<SaveVehiclesEventArgs> callBack)
    {
        var pick = new **ProjectServiceClient**();
        pick.SaveVehiclesCompleted += (sender, e) =>
        {
            if (callBack != null)
                callBack(this, new SaveVehiclesEventArgs(e.Result, e.fault));
        };
        var data =
            new ObservableCollection<VehicleFullInfo>(vehicleFullInfoCollection.Select(rec => rec.Data).ToList());
        pick.SaveVehiclesAsync(infoKey, data);
    }

----------来自 WCF 服务

public interface IProjectService
{
    [OperationContract]
    string SaveVehicles(InfoKey infoKey, IList<VehicleFullInfo> vehicleFullInfoCollection, out FaultContract fault);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ProjectService : IProjectService
{
    public string SaveVehicles(InfoKey infoKey, IList<VehicleFullInfo> vehicleFullInfoCollection, out FaultContract fault)
    {      
        return PickVehicles.SaveVehicles(infoKey, vehicleFullInfoCollection,  out fault);
    }
}

------ PickVehicles 类------

保存到文件

------------ 数据契约

[DataContract]
public class VehicleFullInfo
{
    [DataMember]
    public Vehicle Vehicle { get; private set; }
}

------车辆数据合同

[DataContract]
public class Vehicle
{
    public Vehicle(Data vehicleData, int index)
    {

    }

    [DataMember]
    public string VehicleNumber { get; set; }

    [DataMember]
    public bool? IsVehicleFromPolicy { get; private set; }

    [DataMember]
    public bool? IsInclude { get; set; }

    [DataMember]
    public string VIN { get; set; }

    [DataMember]
    public VehicleTypeEnum Type { get; set; }

    [DataMember]
    public int? ModelYear { get; set; }

    [DataMember]
    public VehicleMake Make { get; set; }

    [DataMember]
    public string Model { get; set; }

    [DataMember]
    public bool? HasAntiTheft { get; set; }

    [DataMember]
    public AirBagTypeEnum AirBagType { get; set; }

    [DataMember]
    public int? GarageZip { get; set; }

    [DataMember]
    public VehicleUseTypeEnum VehicleUseType { get; set; }

    [DataMember]
    public int? Miles { get; set; }

    [DataMember]
    public int? TrailerValue { get; set; }

    [DataMember]
    public bool? IsMotorhomeSold { get; set; }

    [DataMember]
    public int? TrailerCamperLength { get; set; }

    [DataMember]
    public string TrailerDesc { get; set; }

    [DataMember]
    public int? TrailerGrossWeight { get; set; }

    [DataMember]
    public string ExtraField { get; set; }
}

【问题讨论】:

    标签: c# .net wcf silverlight


    【解决方案1】:

    Not Found 是 Silverlight 上的一般错误,这可能意味着很多事情 - 跨域问题、来自网络的任何非 200 响应等。您可以做一些事情,例如启用跟踪服务器端,或使用 Fiddler 等工具查看网络流量,这将为您提供有关错误的更多信息。

    http://blogs.msdn.com/b/silverlightws/archive/2008/04/16/debugging-web-service-usage-in-silverlight-2.aspx 的帖子包含一些在调试 Silverlight 进行的 WCF 调用时很有用的信息。

    【讨论】:

    • 我进行了跟踪,但没有发现任何错误。奇怪的是当我删除那个 [DataMember] public string ExtraField { get;放;一切正常,但是当我拥有它时,我得到了这个错误。为了让我从 DataContract 中删除任何其他字段时变得更加奇怪,我可以保留 ExtraFeild 看起来像它在计算那里有多少数据成员
    • 又跑得到这个System.ServiceModel.ProtocolException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089最大消息大小配额已超出传入消息 (65536)。要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性。 看起来我必须使其更大。有没有办法给它一个滑动值?
    • 在您的服务的 web.config 中,更改您用于托管服务的绑定中的 maxReceivedMessageSize 属性。
    【解决方案2】:

    大多数情况下会发生此错误,只需右键单击每次在时钟附近运行应用程序时打开的 ASP.NET IIS 服务器图标并停止它。

    然后再试一次。

    【讨论】:

      【解决方案3】:

      尝试在服务器配置文件的终点设置绑定配置 - 示例:

       <endpoint
                 address=""
                 binding="pollingDuplexHttpBinding"
                 bindingConfiguration="multipleMessagesPerPollPollingDuplexHttpBinding"
                 contract="DuplexService.IDuplexService">
      </endpoint>
      

      但当然您必须配置相应的绑定 - 例如:

      <bindings>
              <pollingDuplexHttpBinding>
                <binding name="multipleMessagesPerPollPollingDuplexHttpBinding"
                         duplexMode="MultipleMessagesPerPoll"
                         maxOutputDelay="00:00:07"/>
              </pollingDuplexHttpBinding>
      </bindings>
      

      祝你好运。

      【讨论】:

        【解决方案4】:

        Make sure your wcf has tracing enabled。 这通常是导致我遇到问题的原因,这次也是。

        【讨论】:

          猜你喜欢
          • 2023-03-30
          • 1970-01-01
          • 2010-12-22
          • 1970-01-01
          • 2023-03-20
          • 2012-08-31
          • 1970-01-01
          • 2016-11-02
          相关资源
          最近更新 更多