Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 服务引用中出错-使用MessageContractAttribute和其他类型的参数进行操作_C#_Asp.net_Web Services_Svcutil.exe - Fatal编程技术网

C# 服务引用中出错-使用MessageContractAttribute和其他类型的参数进行操作

C# 服务引用中出错-使用MessageContractAttribute和其他类型的参数进行操作,c#,asp.net,web-services,svcutil.exe,C#,Asp.net,Web Services,Svcutil.exe,我已经使用svcutil.exe为第三方外部asmx web服务生成了一个代理类 在本地开发机器上,一切正常,但当我部署到服务器时,会出现以下错误: 与TBS服务通信时出错:无法加载操作“ProcessNotificationAsync”,因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或者具有MessageContractAttribute和其他不同类型参数的类型。使用System.ServiceModel.Channels.Messag

我已经使用svcutil.exe为第三方外部asmx web服务生成了一个代理类

在本地开发机器上,一切正常,但当我部署到服务器时,会出现以下错误:

与TBS服务通信时出错:无法加载操作“ProcessNotificationAsync”,因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或者具有MessageContractAttribute和其他不同类型参数的类型。使用System.ServiceModel.Channels.Message或带有MessageContractAttribute的类型时,该方法不得使用任何其他类型的参数

现在,我理解了这个错误的原因,因为根据MSDN:

您可以将消息类用作操作的输入参数、操作的返回值或两者兼而有之。如果消息在操作中的任何位置使用,则以下限制适用: •操作不能有任何out或ref参数。 •输入参数不能超过一个。如果参数存在,则它必须是消息或消息协定类型。 •返回类型必须为void、Message或Message contract类型

当我查看生成的代码文件时,我看到:

  public System.Threading.Tasks.Task<ProcessNotificationResponse> ProcessNotificationAsync(int aNotificationID, string aComponentParam)
public System.Threading.Tasks.Task ProcessNotificationAsync(int-aNotificationID,string-aComponentParam)
这似乎违反了上述规则,因为ProcessNotificationResponse是MessageContractAttribute和其他参数原语类型


为什么这在一台机器上工作而在另一台机器上不工作?我希望它在两台机器上都会出错。

我遇到的正是这个问题。两台开发计算机工作,生产计算机出现此错误。事实证明,这与.net 4.5支持异步调用而.net 4.0不支持这一事实有关。 生产计算机运行的是server 2003,而.net 4.5无法在其上运行

解决方案是将项目降级到.NET4.0,删除并重新添加引用。当设置为.net 4.0时,它不会添加异步调用。它现在在生产计算机上工作


如果生产计算机能够运行.net 4.5,安装.net 4.5就可以解决这个问题。

我也面临同样的问题。我打电话给第三方WCF服务。做了很多搜索。最后发现wcf服务是在FW4.5版本中构建的,我的asp.net网站的目标是FW3.5版本。然后彻底检查了服务代理类,发现服务公开了一些异步方法,这些方法返回FW 4.5版本的System.Threading.Tasks。简单地注释了所有与FW4.5相关的代码。但幸运的是,我的实际调用方法没有这些。事情开始进展顺利


另一个解决方案可能是将asp.net项目转换为FW 4.5版本。我用一个简单的测试应用程序进行了测试,没有对代理类中的任何行进行注释,它也工作得很好

我也有类似的事情发生。通过WCF连接到web服务在我的开发机器上运行良好。在尝试部署时,我会收到上面显示的错误消息。你找到原因了吗?不,这完全是个谜。幸运的是,我不需要有问题的方法,所以我在生成的代码文件中对它们进行了注释。正如您所知,对于我来说,问题是通过客户重新安装构建服务所依据的.net framework解决的。一旦他们这样做了,一切都很好。是的,这也解决了问题。谢谢