c# - 如何使用 WCF 服务的代理实现读取类库中的 System.serviceModel
问题描述
我正在尝试从库的 app.config 文件中读取类库中的服务配置。但低于例外
在 ServiceModel 客户端配置部分中找不到名为“WSHttpBinding_IUsers”和合同“ISGP.Plugins.SolveService.IUsers”的端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此名称匹配的端点元素。
我尝试实现以下代码来读取配置并创建客户端
public class ServiceManager
{
public static T CreateServiceClient<T>(string configName)
{
// string _assemblyLocation = Assembly.GetExecutingAssembly().Location;
var configuration = ConfigurationManager.OpenMappedExeConfiguration(
new ExeConfigurationFileMap
{
ExeConfigFilename = "app.config"
}, ConfigurationUserLevel.None);
ConfigurationChannelFactory<T> channelFactory = new ConfigurationChannelFactory<T>(configName, configuration, null);
var client = channelFactory.CreateChannel();
return client;
}
}
如下调用此方法
usersClient= (UsersClient)ServiceManager.CreateServiceClient<IUsersChannel>("WSHttpBinding_IUsers");
usersClient.ClientCredentials.UserName.UserName = userName;
usersClient.ClientCredentials.UserName.Password = password;
但它会引发上述异常 app.config 文件如下
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IUsers">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://xxxxxx16.prod.xxxxx.local/WebServices/v3/Users.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUsers"
contract="ISGP.Plugins.SolveService.IUsers" name="WSHttpBinding_IUsers" />
</client>
</system.serviceModel>
解决方案
请在通道工厂构造函数中传递端点参数。
ConfigurationChannelFactory channelFactory = new ConfigurationChannelFactory(configName, configuration, null);
你可以参考下面的代码。
ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "app.config";
Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
ConfigurationChannelFactory<IService> factory = new ConfigurationChannelFactory<IService>("endpoint1", newConfiguration, new EndpointAddress("http://localhost:8000/servicemodelsamples/service"));
factory.Credentials.UserName.UserName = "jack";
factory.Credentials.UserName.Password = "123456";
IService client1 = factory.CreateChannel();
https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/configuration-channel-factory
如果有什么我可以帮忙的,请随时告诉我。
推荐阅读
- python - 在 sudo 中运行 python 文件,但在用户空间中运行配置文件
- gstreamer - Kinesis Video Streams C++ 创建者 SDK 中的 GStreamer
- python - 为什么在 numpy 数组中将 int 数相乘而不是 float 数需要 loger,
- python - 在 Spyder 中恢复主编辑器上方的文件选项卡
- python - 无法在 Python 中获得 C 扩展 CMySQLConnection
- python - 获取pandas中不为null的上一个和下一个值
- python - 将列表列表保存到另一个列表列表中,但在 python 中进行了更改
- recaptcha - recaptcha v3 前端 .execute() 返回奇怪的结果 )]}' ["rresp","..."]
- reactjs - 反应在开发中工作的环境变量,而不是在部署到 netlify
- javascript - 选择要复制和放置的文件后功能不起作用