gpt4 book ai didi

wcf - 为什么 powershell 向 Web 服务方法签名添加额外的参数

转载 作者:行者123 更新时间:2023-12-04 06:52:50 24 4
gpt4 key购买 nike

我正在尝试使用 Powershell 从命令行 ping 几个 WCF Web 服务。例如

我有一个 WCF 操作

[OperationContract]
string DoWork(string name);

我可以使用 Powershell 调用它。
$proxy = New-WebServiceProxy -Uri 'http://localhost/TestService/Service.svc'
$proxy.DoWork('Hello World')

只要输入参数和返回类型是字符串,就可以正常工作。但是,如果我引入整数,则生成的方法签名和返回类型会生成额外的 paramSpecified 属性。

考虑以下带有数据协定返回类型的方法。
[DataContract]
public class SimpleClass
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Count { get; set; }
}

...

[OperationContract]
SimpleClass DoWorkD(string name, int howMany);

问题 1

方法的签名错误并且有一个额外的参数 bool howManySpecified .
$proxy = New-WebServiceProxy -Uri 'http://localhost/TestService/Service.svc'
$method = $proxy | Get-Member -Name DoWorkD
$method.Definition

Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTypes.WebServiceProxy3alhost_TestService_Service_svc.SimpleClass, -nv8lxgh, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null DoWorkD(string name, int howMany, bool howManySpecified)

问题2

DataContract 类的返回代理还有额外的 XXXSpecified非字符串属性的属性。
______________________________________________________________________
PS D:\Work\Sandbox\Powershell> $proxy.DoWorkD("Hello World", 10, $true")

Count CountSpecified Name
----- -------------- ----
10 True Hello World

问题3

将原始类型设置为返回类型具有完全不直观的行为。一个返回整数的简单方法作为 System.Void 方法出现,其结果可通过 ref 参数获得。
[OperationContract]
int DoWorkE(int a, int b, int c, int d);

PS D:\Work\Sandbox\Powershell> $proxy.DoWorkE(1,$true, 2,$true,3,$true,4,$true, [ref] $intresult, [ref] $intresultPresent)
$intresult
10

PS D:\Work\Sandbox\Powershell> ($proxy | Get-Member -Name DoWorkE).Definition
System.Void DoWorkE(int a, bool aSpecified, int b, bool bSpecified, int c, bool cSpecified, int d, bool dSpecified, System.Int32& DoWorkEResult, System.Boolean& DoWorkEResultSpecified)

这是设计使然。我很困惑为什么这些额外的 specified需要参数,如果不需要,是否可以删除它们,并且 int-results-by-ref 很奇怪

感谢任何人都可以对这种设计/行为有所了解。

最佳答案

阅读我很久以前问的这个问题:

Strange behaviour calling method of wcf from powershell using new-webproxyservice

您需要添加 [XmlSerializerFormat]操作合约以避免额外的 bool 参数。

关于wcf - 为什么 powershell 向 Web 服务方法签名添加额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9888610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com