使用powershell通过配置文件config调用wcf(含用户名密码认证)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用powershell通过配置文件config调用wcf(含用户名密码认证)相关的知识,希望对你有一定的参考价值。

1.环境设定

  工作目录:

    D:\\workspace\\  (目录可随意)

  需要的应用程序:

    SvcUtil.exe(解析wcf的url生成cs和config文件的工具)来源:有vs.net的PC的C盘中搜索出来,复制到D:\\workspace\\中。

    csc.exe(通过cs文件生成dll的工具)来源:C盘中搜索出来,不复制。

  需要的DLL:

    System.ServiceModel.dll  来源:有framework的PC的C盘中搜索出来(版本号要和SvcUtil.exe生成的cs文件需要的一致),复制到D:\\workspace\\中。

2.命令行

(粗体:命令行;  粗体斜体:可替换的WCF参数;  红字:说明;  其他:控制台输出)

#跳转到工作目录

PS C:\\Users> cd D:\\workspace\\

#解析wcf的url生成cs和config文件

PS D:\\workspace> .\\SvcUtil.exe https://test.xxxxxxxxxxx.com/API_v1/WCFService.svc

Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.648]
Copyright (c) Microsoft Corporation. All rights reserved.

Attempting to download metadata from \'https://test.xxxxxxxxxxx.com/API_v1/WCFService.svc\' using WS-Metadat
a Exchange or DISCO.
Generating files...
D:\\workspace\\WCFService.cs
D:\\workspace\\output.config

#引用System.ServiceModel.dll编译WCFService.cs生成WCFService.dll

PS D:\\workspace> C:\\Windows\\Microsoft.NET\\Framework\\v3.5\\csc.exe /t:library WCFService.cs /r:".\\System.ServiceModel.dll"

适用于 Microsoft(R) .NET Framework 3.5 版的 Microsoft(R) Visual C# 2008 编译器 3.5.30729.5420

版权所有(C) Microsoft Corporation。保留所有权利。

#当前路径保存

PS D:\\workspace> $current_directory = Get-Location

#当前路径显示

PS D:\\workspace> $current_directory

Path
----
D:\\workspace

#加载System.ServiceModel.dll

PS D:\\workspace> [System.Reflection.Assembly]::LoadFrom("$current_directory\\System.ServiceModel.dll")

GAC Version Location
--- ------- --------
True v4.0.30319 C:\\Windows\\Microsoft.Net\\assembly\\GAC_MSIL\\System.ServiceModel\\v4.0_4.0.0.0__b77a5c561934e089\\...

#加载WCFService.dll

PS D:\\workspace> [System.Reflection.Assembly]::LoadFrom("$current_directory\\WCFService.dll")

GAC Version Location
--- ------- --------
False v2.0.50727 D:\\workspace\\WCFService.dll

#设置环境的配置config文件
PS D:\\workspace> [System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", "$current_directory\\output.config")
PS D:\\workspace> if ($psISE -ne $null) {
>> Add-Type -AssemblyName System.Configuration
>> [Configuration.ConfigurationManager].GetField("s_initState", "NonPublic, Static").SetValue($null,0)
>> [Configuration.ConfigurationManager].GetField("s_configSystem", "NonPublic, Static").SetValue($null,$null)
>> ([Configuration.ConfigurationManager].Assembly.GetTypes() | where {$_.FullName -eq "System.Configuration.ClientCo
nfigPaths"})[0].GetField("s_current", "NonPublic, Static").SetValue($null, $null)
>> }
>>

#连接WCF,取得服务对象
#(WCFServiceClient是WCFService.cs中的类名,是System.ServiceModel.ClientBase的子类)
#("CustomBinding_IWCFService"是output.config的endpoint元素name属性的值)

PS D:\\workspace> $service = new-object WCFServiceClient("CustomBinding_IWCFService")

#设置验证用户名(服务端提供)
PS D:\\workspace> $service.ClientCredentials.UserName.UserName="user001"

#设置验证密码(服务端提供)
PS D:\\workspace> $service.ClientCredentials.UserName.Password="password001"

#调用服务对象方法(参数有复杂类型时,复杂类型定义在WCFService.cs中,实例化后传入下面的方法)
PS D:\\workspace> $service.GetInfo("001","1")

 

 ※转载请注明出处http://i.cnblogs.com/EditPosts.aspx?postid=5316333

 

           

 

以上是关于使用powershell通过配置文件config调用wcf(含用户名密码认证)的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell 应用程序配置

如何在Win10中通过powershell修改Jupyter notebook的默认目录

使用 CurrentDomain.SetData("APP_CONFIG_FILE") 在 PowerShell ISE 中不起作用

如何使用 PowerShell 读取/写入 App.config 设置?

powershell Encrypt-Config.ps1:用于加密或解密.NET app.config文件的PowerShell工具

通过 Powershell 配置 Windows Explorer 文件夹选项