C# 将工作流作为WCF服务引用添加到网站。WCF内的业务对象也不必要地公开

C# 将工作流作为WCF服务引用添加到网站。WCF内的业务对象也不必要地公开,c#,asp.net,.net,wcf,workflowservice,C#,Asp.net,.net,Wcf,Workflowservice,我的解决方案有B2BobjectDLL、Web应用程序和工作流作为WCF服务项目。工作流wcf和web应用程序都引用了B2BObObject。因此,在向我的Web应用程序添加工作流WCF引用时,它正确地公开了getTosCardData方法 下面我使用的Toss类是一个B2BobjectDLL Toss toss = new Toss(); toss.GameID = 123; string tossCardData = string.empty; tossCardData = tossCar

我的解决方案有B2BobjectDLL、Web应用程序和工作流作为WCF服务项目。工作流wcf和web应用程序都引用了B2BObObject。因此,在向我的Web应用程序添加工作流WCF引用时,它正确地公开了getTosCardData方法

下面我使用的Toss类是一个B2BobjectDLL

Toss toss = new Toss();
toss.GameID = 123;
string tossCardData = string.empty; 
tossCardData = tossCardService.GetTossCardData(toss, "10");
问题是GetTosCardData必须接受B2BobjectDLL类对象toss,但该方法告诉我们必须输入TosCardService的toss对象

对象浏览器窗口告知WF WCF项目不必要地公开与其服务对象相同的B2BobjectDLL类对象

错误消息是

Error   2   Argument 1: cannot convert from 'B2BBusinessObjects.Toss' to 'SignalRServerNew.ServiceReference2.Toss'

如何限制公开的对象,或者为什么它被错误地公开为不同的类?

当您添加服务引用时,发生的情况是VS为您运行一个名为svcutil的工具,以使用工作流作为服务公开的WSDL生成代理类,这基本上只是另一个WCF服务

添加服务引用时,可以指定希望重用某些程序集中的某些类型—这意味着工具不应为这些类型生成新类,而应以期望重用这些类型的方式创建代理类

在本例中,您希望告诉VS重用引用程序集B2BobjectDLL中的类型

Toss toss = new Toss();
toss.GameID = 123;
string tossCardData = string.empty; 
tossCardData = tossCardService.GetTossCardData(toss, "10");
根据您提供的错误消息判断,我可以断定这种重用没有发生,因为您在clr namepsace SignalRServerNew.ServiceReference2中生成的代理类预期具有相同名称空间的对象,因为它们是这样生成的

你应该做的是:

删除您当前的服务引用,并确保没有留下任何痕迹

添加新的服务引用,并确保指定要重用程序集中的类型在visual studio中“添加服务引用”窗口的左下角应有一个高级按钮

可选-在生成的文件中实际浏览一下,看看代理类是如何生成的。 希望有帮助