系统架构需要使用Web service来降低耦合性但是现场布置的时候WebService的地址是不固定的
可以使用修改exe文件的对应的nfig中的设置来达到目的
nfig文件是一个XML配置文件其中描述了Web Service的地址节点@configuration/systemserviceModel/client/endpoint 中的address属性的值就是Web Service的地址例如
创建一个类DynamicURL来进行Web Service地址修改操作
class DynamicURL
using SystemDiagnostics;
using SystemXml;
using SystemIO;
using SystemWindowsForms;
namespace TestWSDL
{
public class DynamicURL
{
static public string LoadURL()
{
string exeConfigFile = ProcessGetCurrentProcess()MainModuleFileName + nfig;
if (FileExists(exeConfigFile))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDocLoad(exeConfigFile);
XmlNode xn = xmlDocSelectSingleNode(@configuration/systemserviceModel/client/endpoint);
if (xn != null)
{
XmlElement xe = (XmlElement)xn;
if (xe != null)
{
return xeGetAttribute(address);
}
}
}
else
{
MessageBoxShow(stringFormat(找不到文件{} exeConfigFile));
}
return stringEmpty;
}
static public long SaveURL(string URL)
{
string exeConfigFile = ProcessGetCurrentProcess()MainModuleFileName + nfig;
if (FileExists(exeConfigFile))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDocLoad(exeConfigFile);
XmlNode xn = xmlDocSelectSingleNode(@configuration/systemserviceModel/client/endpoint);
if (xn != null)
{
XmlElement xe = (XmlElement)xn;
if (xe != null)
{
xeSetAttribute(address URL);
xmlDocSave(exeConfigFile);
return ;
}
}
}
else
{
MessageBoxShow(stringFormat(找不到文件{} exeConfigFile));
}
return ;
}
}
}
为了测试建议Web Service HelloWorld 里面有方法HelloWorld返回字符串Hello World 拷贝HelloWorld成HelloWorld然后将HelloWorld的返回值设置成This is the second Hello world Web Service 以便调用的时候可以区别两个Web Service
在新建的窗体上添加个按钮和个TextBox控件
往工程中添加服务引用 ServiceReferenceVS会自动添加 上服务描述
Form为测试窗体
测试窗体
using System;
using SystemWindowsForms;
namespace TestWSDL
{
public partial class Form : Form
{
public Form()
{
InitializeComponent();
thistextBoxURLText = DynamicURLLoadURL();
}
private void buttonModifyURL_Click(object sender EventArgs e)
{
if ( == DynamicURLSaveURL(thistextBoxURLText))
{
MessageBoxShow(修改Web Service的URL成功);
}
}
private void buttonCallWebService_Click(object sender EventArgs e)
{
thistextBoxResultText = ;
ServiceReferenceServiceSoapClient client = new TestWSDLServiceReferenceServiceSoapClient();
thistextBoxResultText = clientHelloWorld();
}
}
}
测试步骤
在IIS中为两个Web Services分别设置虚拟目录HelloWorld和HelloWorld
运行程序点击调用按钮查看调用结果再将URL地址从修改成点击修改Web Service地址再调用Web Service查看结果
两次Web Service调用结果分别为 Hello World和This is the second Hello world Web Service
可以看到修改Web Service地址的效果了