【问题标题】:.Net 4.0 WCF Service failing when passing parameters.Net 4.0 WCF 服务在传递参数时失败
【发布时间】:2011-05-18 14:52:39
【问题描述】:

我正在尝试使用来自 WCF 测试客户端的 basichttpbinding 端点来测试 WCF 服务。我可以毫无问题地测试不传递参数的方法,但是当我需要传递参数时,会出现以下错误:

调用服务失败。可能的 原因:服务离线或 无法访问;客户端 配置不匹配 代理;现有代理无效。 有关更多信息,请参阅堆栈跟踪 细节。您可以尝试通过以下方式恢复 启动一个新的代理,恢复到 默认配置,或者刷新 服务。

执行时发生错误 命令定义。见内 详情例外。

服务器堆栈跟踪:在 System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(消息 回复,MessageFault 故障,字符串 动作,MessageVersion 版本, 故障转换器故障转换器)在 System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime 操作,ProxyRpc& rpc) 在 System.ServiceModel.Channels.ServiceChannel.Call(字符串 动作,单向布尔值, ProxyOperationRuntime 操作, Object[] 输入,Object[] 输出,TimeSpan 超时)在 System.ServiceModel.Channels.ServiceChannel.Call(字符串 动作,单向布尔值, ProxyOperationRuntime 操作, Object[] 输入,Object[] 输出)在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage 方法调用、代理操作运行时 操作)在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 留言)

在 [0] 处重新抛出异常:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg)在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(消息数据& msgData,Int32 类型)在 IErouter.GetClientSearch(字符串 姓,字符串 名字,字符串 街道,字符串邮政编码)在 ErouterClient.GetClientSearch(字符串 姓,字符串 名字,字符串 街道,字符串邮政编码)

由于我可以调用无参数方法,所以这个错误对我来说毫无意义。

[ServiceContract]
public interface IErouter
{
    #region Client Search

    [OperationContract]
    SelectClientSearch_Result[] GetClientSearch(
        string surname, string forename, string street, string postcode);

    #endregion

    #region Changes

    [OperationContract]
    ChangeForBlackBerry[] GetClientChanges(string blackberryPin);

    [OperationContract]
    bool AcceptChange(int changeId, string blackberryPin);

    [OperationContract]
    bool AcknowledgeChange(int changeId, string blackberryPin);

    [OperationContract]
    ChangeForBlackBerry[] GetManagerChangesForShiftType(string blackberryPin, 
        string date, int shiftTypeId);

    [OperationContract]
    ClientDetailChangeViewModel GetClientDetailChange(int changeId);

    #endregion

    #region Client Details

    [OperationContract]
    ClientDetailViewModel GetClientDetails(int clientId);

    [OperationContract]
    SelectUserLevel_Result GetUserLevel(string blackberryPin);

    #endregion

    #region Useful Contacts

    [OperationContract]
    SelectAdminCentreTelNo_Result[] GetAdminCentreTelNos();

    [OperationContract]
    string GetDutyEmail();

    [OperationContract]
    SelectDutyManager_Result[] GetDutyManagerTelNos();

    [OperationContract]
    string GetGhaHandyTelNo();

    [OperationContract]
    SelectHospitalNos_Result[] GetHospitalTelNos();

    [OperationContract]
    string GetICTTelNo();

    [OperationContract]
    string GetMAHMobileTelNo();

    [OperationContract]
    SelectMyManagerNo_Result[] GetMyManagerTelNo(string blackberryPin);

    [OperationContract]
    string GetNHSDirectTelNo();

    [OperationContract]
    string GetOOHEmail();

    [OperationContract]
    string GetOOHTelNo();

    [OperationContract]
    string GetOperationsEmail();

    [OperationContract]
    string GetOperationsTelNo();

    [OperationContract]
    string GetOtherHandyPersonTelNo();

    [OperationContract]
    SelectSWTelNos_Result[] GetSWTelNo();

    #endregion

    #region Gaurdian 24 Visit Monitoring

    [OperationContract]
    string StartVisitMonitoring(int clientId, int activityDuration, 
        string activityText, string blackberryPin);

    [OperationContract]
    string StopVisitMonitoring(int clientId, string activityId, 
        string blackberryPin);

    #endregion
}

【问题讨论】:

  • 您能发布您的服务和数据合同吗?
  • 啊,我之前没看懂,但是看到“执行命令定义时出错”,你是不是碰巧在使用实体框架?
  • 内部异常是什么?您是否在数据类(ClientDetailViewModel 和其他)上设置了 [DataContract] 属性
  • 您是否尝试调用 GetHospitalTelNos() 或 GetOperationsTelNo()?
  • @littlechris 有内部异常吗?关于命令定义的消息意味着查询出错了,异常的位置使查询看起来像是在序列化期间执行的。

标签: .net wcf .net-4.0


【解决方案1】:

这可能是序列化错误 - 检查您的返回类 SelectClientSearch_Result 是否有 [DataContract] 或 [Serializable]。

【讨论】:

    【解决方案2】:

    可能值得尝试将以下内容添加到 web.config:

    <serviceHostingEnvironment>
        <baseAddressPrefixFilters>
            <add prefix="http://host:port"/>
        </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    

    如果这不起作用,您可以尝试添加上述内容并删除元素:&lt;host&gt;&lt;/host&gt;(来自我链接的最后一个链接的想法)

    只需将以下内容添加到 web.config 可能会有所帮助。

    <system.serviceModel>        
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />    
    </system.serviceModel>
    

    我读过的网站是:

    http://msdn.microsoft.com/en-us/library/aa702682.aspx
    http://msdn.microsoft.com/en-us/library/ms731336.aspx
    http://community.discountasp.net/showthread.php?t=7719
    

    有人提到 WCF 服务的行为与 ASMX 服务完全一样,这就是我认为它可能相关的原因。

    编辑:

    可能值得快速阅读? http://support.microsoft.com/kb/958478

    【讨论】:

    • 干杯詹姆斯-但对此并不满意。需要进入内部异常以获取更多信息
    【解决方案3】:

    错误来自应用程序的其他地方... WCF 错误不是最大的! :)

    【讨论】:

    • 我知道这是一条很老的评论,但您能描述一下错误的来源吗?
    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多