奇怪的行为使用new-webproxyservice从powershell调用wcf的方法

时间:2011-06-14 12:21:50

标签: wcf powershell

有人可以向我解释一下:

为了测试目的,我构建了一个非常简单的wcf服务 使用New-WebServiceProxy从powershell使用服务我发现了这种stange行为:

如果在wcf服务中我有这种合同返回int

[OperationContract]
int GetDictionaryLength();

在powershell中调用此方法会产生错误,并且该方法的定义不是我期望看到的

PS C:\ps> $a | Get-Member getdictionarylength | fl *
  

TypeName:   Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy1_022s_pwdservice_svc_wsdl.PWDService

     

名称:GetDictionaryLength

     

MemberType:方法

     

定义: System.Void   GetDictionaryLength(System.Int32&安培;,   mscorlib,版本= 4.0.0.0,   文化=中性,   公钥= b77a5c561934e089   GetDictionaryLengthResult,   System.Boolean&,mscorlib,   版本= 4.0.0.0,文化=中立,   公钥= b77a5c561934e089   GetDictionaryLengthResultSpecified)

像这样改变合同:

[OperationContract]
string GetDictionaryLength();

做一个名为powershell的好工作。

为什么这样?

WCF位于.net 4.0中 Powershell是V2

2 个答案:

答案 0 :(得分:4)

试验你的答案,然后最终发现this answer,如果你只是将[XmlSerializerFormat]添加到操作合同中,那么你的所有问题都会消失,方法签名将恢复正常。至少在针对2.0 .Net框架和PowerShell进行测试时,我遇到了问题。

答案 1 :(得分:1)

最后我发现了这个:

PS C:\ps> [int]$int = 0
PS C:\ps> $bool = $true
PS C:\ps> $a.DictionaryLength([ref]$int, [ref]$bool)
PS C:\ps> $int
61

我使用.net 2.0(powershell本机框架)为客户端应用程序构建了一个解决方案来使用我的wfc(.net 4.0) 方法DictionaryLegth()的定义是:

void myservice.DictionaryLength(out int DictyionaryLengthResult, out bool DictonaryLengthSpecified)