c# - 在 Visual Studio 中使用动态根 URL 生成 Web 服务
问题描述
我想创建一个与两个 SOAP Web 服务通信的 C# 应用程序。这些 Web 服务(WSDL 文件)使用相同的 url
<root>/...dirPath.../dms.cfc?wsdl
<root>/...dirPath.../cobra.cfc?wsdl
<root>
应该是动态的,因为应用程序用户必须设置此变量。
首先我拿了这个
如何在不重新编译的情况下在 .NET 中动态切换 Web 服务地址?
并尝试了这个
https://www.codeproject.com/Articles/12317/How-to-make-your-Web-Reference-proxy-URL-dynamic
此外,我找到了这个链接
但这些链接没有帮助我找不到设置URL behaviour
,我无法通过代码访问 URL 属性。
我创建了一个应该处理这两个 web 服务的静态类。用户能够更改网络服务根 URL。
一个示例 URL 是
http://localhost:8500/CoBRA/...dirPath.../dms.cfc?wsdl
或者
http://myInstance.com/CoBRA/...dirPath.../dms.cfc?wsdl
由这段代码处理
public static class CoBRAService
{
private static cobraClient cobraBaseClient = new cobraClient();
private static dmsClient cobraDmsClient = new dmsClient();
public static void SetWebserviceRootUrl(string rootUrl)
{
// cobraBaseClient.url = $"{rootUrl}/path/dms.cfc?wsdl";
// cobraDmsClient.url = $"{rootUrl}/path/cobra.cfc?wsdl";
}
}
两个 web 服务都没有继承System.Web.Services.Protocols.SoapHttpClientProtocol
它们实现这个public partial class cobraClient : System.ServiceModel.ClientBase<MyProject.CoBRA_Base.cobra>, MyProject.CoBRA_Base.cobra
这是我的项目结构
我在哪里可以设置 web 服务 url 或如何访问 url 属性?
解决方案
如果您的“CoBRA_BaseClient”和“CoBRA_DMSClient”继承自System.ServiceModel.ClientBase<TChannel> ,那么您可以尝试以下操作:
public static CoBRA_BaseClient CreateService()
{
CoBRA_BaseClient service = new CoBRA_BaseClient();
service.Endpoint.Address = new EndpointAddress("uri");
return service;
}
public static CoBRA_DMSClient CreateService()
{
CoBRA_DMSClient service = new CoBRA_DMSClient();
service.Endpoint.Address = new EndpointAddress("uri");
return service;
}
推荐阅读
- python - 调用“python3”会导致分段错误
- c# - 创建一个自定义 BindableProperty,它采用 XAML 中基础返回类型的自定义定义字符串表示形式
- c# - 在删除之前修改字典的元素
- python - 关于颜色的散点图图例 [Python3]
- python - 如何更新循环中创建的按钮和标签的 Tkinter 参数?
- javascript - 减少电报机器人脚本以使其可扩展 NodeJS
- python - Pandas 多级分组按日期、年份、保存小时
- javascript - 如何将 JS 中的二维数组与字符串和数字相加
- javascript - Error using library: Invalid hook call. Hooks can only be called inside of the body of a function component
- python - Django migrate won't run new migration when migration exists