在我的 Web 应用程序引用的类库中访问 wcf 数据服务时出现问题
Posted
技术标签:
【中文标题】在我的 Web 应用程序引用的类库中访问 wcf 数据服务时出现问题【英文标题】:Problem accessing wcf data service inside class library referenced by my web app 【发布时间】:2019-08-22 07:51:35 【问题描述】:通过我的 Web 应用程序中的 vb.net 类访问云数据服务时出现资源错误。
我编写了一个 vb.net 类库(称为 MYAPPIF),它引用了一个 wcf 数据服务,其中包含在这些数据上工作的常用函数。比如我可能想保存一笔交易,我会通过这个类库来做。然后这个类库被我的 Web 应用程序引用,通过“Imports MYAPPIF”,我可以看到常用功能,也可以看到云服务引用。
dim oMyAppIF = new MyAppIF.class
dim oCloudContext = oMyAppIF.GetWCFConnection() ' a function in class
oQueryList = (From seldata In oCloudContext.vwContractList
Order By seldata.cnname
Select seldata).ToList()
网站编译正常,但运行时出现以下错误:
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.Services.Client.DataServiceClientException:找不到段“vwContractList”的资源。
堆栈跟踪:
[DataServiceClientException:找不到段“vwContractList”的资源。] System.Data.Services.Client.QueryResult.ExecuteQuery() +487 System.Data.Services.Client.DataServiceRequest.Execute(DataServiceContext context, QueryComponents queryComponents) +186
【问题讨论】:
什么是oCloudContext.vwContractList
...
oCloudContext 是对 wcf 数据服务的对象引用,而 vwContractList 是一个实体框架对象
【参考方案1】:
不要通过在类库项目中添加服务引用来调用服务,因为类库会使用当前Web APP项目的WebConfig文件,而不是类库的配置。可以将servicemodel下的配置复制到当前项目中,也可以使用通道工厂调用动态编写配置。
public string Invocation()
//ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
//return client.GetData(34);
ChannelFactory<IService1> factory = new ChannelFactory<IService1>(new BasicHttpBinding(), new EndpointAddress("http://10.157.18.36:12000/service1.svc"));
IService1 sv = factory.CreateChannel();
return sv.GetData(46);
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-the-channelfactory 如果有什么可以帮助的,请随时告诉我。
【讨论】:
感谢您的帮助。因此,我不是在我的类库中调用 oCloudConext,而是在我的 Web 应用程序中执行它,然后将引用传递给我的类库中的各种函数,这可以工作并解决问题,但是,你是否建议我可以在我的类中创建 oCloudContext使用您上面提到的特殊 channelFactory 函数库? 是的,这种调用服务的方式能够以编程方式配置这些参数,而不是配置文件。以上是关于在我的 Web 应用程序引用的类库中访问 wcf 数据服务时出现问题的主要内容,如果未能解决你的问题,请参考以下文章