有人可以向我解释一下:
为了测试目的,我构建了一个非常简单的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
答案 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)