使用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

时间: 2024-09-30 19:56:32

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

Geoserver通过ajax跨域访问服务数据的方法(含用户名密码认证的配置方式)

Goeserver数据有两种,一种需进行用户密码的权限认证,一种无须用户密码.对于网上跨域访问Geoserver数据的种种方法,对这2种数据并非通用. 笔者将Geoserver官方下载的Geoserver.war包部署到linux服务器,通过前端 ajax 访问geoserver数据失败,其中包含跨域问题和用户名密码认证问题,查询网上各类方法进行尝试,结果浏览器控制台分别报出了401,403和跨域错误提示.其中: 401错误:ajax未进行用户名密码验证导致: 403错误:用户名密码验证失败导致

【WCF】Silverlight+wcf+自定义用户名密码验证

本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情况下自定义用户名密码验证 中提到了,我想实现的安全效果,就是客户端访问的时候不需要https,也不需要安装证书(商业证书客户端会自动信任),但是暴露的wcf接口不是每个人可以调用的,因为sl+wcf只支持basicHttpBinding一种绑定,在这种绑定下面其实是可以不适用传输安全,然后消息安全选

WCF用户名密码验证方式

WCF使用用户名密码验证 服务契约 namespace WCFUserNameConstract { [ServiceContract] public interface IWcfContract { [OperationContract] bool GetOnWcfService(ref string MessageInfo); } } 服务实现 namespace WcfUserNameService { public class WcfUserNameService : IWcfContr

用JavaScript调用WCF Service

原文:用JavaScript调用WCF Service 原创地址:http://www.cnblogs.com/jfzhu/p/4039604.html 转载请注明出处 前面介绍过<Step by Step 创建一个WCF Service>和<使用WCF的Trace与Message Log功能>,本文介绍一下如何用JavaScript来调用WCF Service. WCF Service的代码如下: IHelloService.cs using System.ServiceMode

学习调用WCF服务的各种方法

1.开发工具调用WCF 这中方法很方便也很简单,很多工作VS就帮我们完成了.相信大家也不会对这种方法陌生.这里简单提一下.打开VS,在项目中添加服务引用: 在config中自动声明了有关服务的节点信息,这样VS就创建了调用服务的代理: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->ServiceReference1.Service1Client

C#动态调用WCF接口

C#动态调用WCF接口 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去研究,最近自己做一个项目时用到了WCF. 从这个小项目中我学会了两个地方: 1.利用IIS部署WCF服务,也就是大家接触到的发布SVC文件.2.动态调用WCF接口. 在这个项目中接触WCF时遇到的其实不仅仅是这两个问题,甚至连IIS支持SVC文件也让我折腾了好几把,IIS都重新卸载了两次. 我在这篇文章里用两种方式来实现

两种方法供你动态调用WCF接口

写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去研究,最近自己做一个项目时用到了WCF. 从这个小项目中我学会了两个地方: 1.利用IIS部署WCF服务,也就是大家接触到的发布SVC文件.2.动态调用WCF接口. 在这个项目中接触WCF时遇到的其实不仅仅是这两个问题,甚至连IIS支持SVC文件也让我折腾了好几把,IIS都重新卸载了两次. 我在这篇文章里用两种方式来实现. 如何使用 1.第一种

【ITOO】WCF——Client调用WCF服务

三步走已经走了两步,一个WCF服务发布好之后,就等待着用的人来调用了,它只向外提供一个接口,暴露地址和契约,不暴露服务是如何实现的.接下来就说说客户端调用WCF服务的事. 其实说到调用就很简单了,首先我们要让我们所需的服务识别我们,即配置好同样的终结点信息,然后添加服务的引用,最后调用相应的方法即可. 如配置文件中: <applicationSettings> <WebDemoClient.Properties.Settings> <setting name="We

微软 BI ssis 中的 script task中用代码直接调用 WCF / Webservice

背景: 在普通的C#项目中,可以直接调用 WCF / Webservice: 在微软BI的 ssis中,有 webservice任务组件,也可以直接调用简单的 WCF / Webservice; 偶这边的情况是,后端的 WCF中用的反射,所以在 ssis中的webservice任务组件中,死活不能识别 WCF对应的方法. 所以只能在ssis的 script task组件中,用纯代码的方式来调用WCF服务. 就这样,可能还是有问题:可能会碰到 不能识别 System.ServiceModel节点的