在我的 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 数据服务时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥找不到我的自定义 WCF 行为扩展元素类型?

通过 WCF 访问类库

服务引用不生成客户端类型

从类库访问用户上下文

在类库中添加 System.Web.Script 引用

我可以使用类库中的System.Web.Mvc吗?