dev*_*ife 12 powershell wcf powershell-2.0
所以我遇到了这个问题:http://www.vistax64.com/powershell/273120-bug-when-using-namespace-parameter-new-webserviceproxy.html
问题的要点是,在使用New-WebServiceProxy cmdlet 和 -Namspace参数时,您无法使用自动生成类型的参数在代理上执行方法.
像这样的东西:
// In the service
public void DoSomething(DoSomethingRequest request) { ... }
$proxy = New-WebServiceProxy -Uri "http://something.com/MyService.svc"
-Namespace ns
$req = New-Object ns.DoSomethingRequest
$proxy.DoSomething($req)
Run Code Online (Sandbox Code Playgroud)
这引发了一个例外 Cannot convert argument "0" of type "ns.DoSomething" to type "ns.DoSomething"
正如链接中所解释的那样,通过删除-Namespace参数并使用自动生成的命名空间,一切正常.但是,我真的想使用-Namespace ....
我无法找到任何与"修复"相关的内容或在此方案中使用-Namespace的正确方法.任何人都可以为我阐明这一点吗?
实际上你看到的东西更微妙.使用-Namespace,您无法在命名空间中执行两次类型的参数
我怀疑你正在创建New-WebServiceProxy,例如,在函数的进程块中,或者在重复调用的命令内部.每次调用它时,它都会尝试重新生成,并且使用-Namespace,这会在AppDomain中与关联类型产生很少的冲突.最终有几个,你得到这个错误.
有两种方法:
这比告诉要容易得多.
我在Office365/Exchange Web服务的模块中遇到了这个问题,而且,它有以下内容:
$createItemType =
New-Object "$script:ExchangeWebServiceNamespace.CreateItemType"
-Property @{
MessageDisposition = $messageDisposition
MessageDispositionSpecified = $true
Items =
New-Object "$script:ExchangeWebServiceNamespace.NonEmptyArrayOfAllItemsType"
}
Run Code Online (Sandbox Code Playgroud)
这显然有点神秘,但是,Exchange Web Services也是如此.许多Web服务也是直接从复杂对象模型构建的.
不幸的是,这是New-WebServiceProxy使用的绝大多数Web服务.
请记住,缓存您在模块中创建的Web服务对象(使用$script:variablename上面的方法)仍然是一种很好的做法,但是通过代理对象引用Web服务部分的这种奇怪技巧比我想要的多得多.
希望这可以帮助
您是否在某个编辑器中运行代码?从 PowerGUI 编辑器运行脚本时我遇到了类似的问题,但当我从控制台运行它时它对我来说工作正常。尝试关闭所有与 powershell 相关的内容并再次打开它
| 归档时间: |
|
| 查看次数: |
3487 次 |
| 最近记录: |