Странное поведение вызова метода wcf из powershell с использованием new-webproxyservice
Может кто-то объяснить это мне:
Я построил действительно простой сервис wcf для тестирования.
Используя сервис PowerShell с использованием New-WebServiceProxy, я обнаружил следующее странное поведение:
если в сервисе 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, Культура = нейтральный, PublicKeyToken=b77a5c561934e089 GetDictionaryLengthResult, System.Boolean&, mscorlib, Версия =4.0.0.0, Культура = нейтральный, PublicKeyTokult0D061D061D061D037D037198779 = 0
изменить контракт следующим образом:
[OperationContract]
string GetDictionaryLength();
сделать большую работу под названием PowerShell.
Почему это?
WCF в.net 4.0 Powershell является V2
2 ответа
Поэкспериментируя с вашим ответом, а затем, наконец, обнаружив этот ответ, кажется, что все ваши проблемы исчезнут, если вы просто добавите [XmlSerializerFormat] к контракту операции, и сигнатура метода вернется в нормальное состояние. По крайней мере, мои проблемы возникали при тестировании на платформе 2.0 .Net и powershell.
Наконец я обнаружил это:
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)