添加服务引用未生成代理。

11

我知道有其他类似的问题,但我没有找到一个可行的解答。

我从模板创建了默认的WCF服务 [包含GetData()和GetDataUsingDataContract()]。
在浏览器中可以正常运行。

我有一个独立的网站,将这个新的WCF服务添加到其中:

我进行“添加服务引用”,输入我的URL,服务出现并单击“确定”添加它。
在“App_WebReferences”下,我看到我添加的服务的命名空间:“ServiceReference1”,下面是“References.svcmap”,以及一些 .svcinfo/.wsdl/.xsd 文件。

没有代理文件被创建,但是<system.serviceModel>元素已被添加到我的web.config中,似乎是正确的信息。

然而,在没有代理的情况下,我无法访问/调用任何服务中的方法(例如ServiceReference1.WCFMethod1()

我可以调用svcutil,生成代理,将其添加到我的App_Code,然后一切都能正常工作。
我的问题是,“添加服务引用”为什么不会创建我的代理?
所有内容均在目标框架下:.NET Framework 4。

编辑:

刚刚创建了一个控制台应用程序并添加了服务引用,它创建了代理。
因此,问题是我的网站没有创建代理...


你是否在调用服务的页面的代码后台中添加了一个 using (VB.NET 中的 Imports) 语句?例如,using <namespace>.ServiceReference1; 或类似的语句? - Tim
如果您正在使用网站“项目”(文件->新建网站),则它不会在运行时创建代理并构建。 - John Saunders
1
约翰,是的我在使用那个。所以,除了使用svcutil没有其他方法吗? - eych
3个回答

8
我有过同样的问题,发现取消勾选“在所有引用的程序集中重用类型”可以解决问题。但是,在我的情况下,我需要它来重用一些我引用库中的类型。我发现这篇文章涵盖了一个非常类似的问题。在那篇文章中,它引用了一个Microsoft 知识库文章,该文章描述了以下问题的修复方法: 考虑以下场景: 您在 Visual Studio 2012 中创建 ASP.NET MVC4 Web API 项目。 您在项目中添加 WCF 服务引用。 在这种情况下,服务引用的 Reference.cs 文件为空。
造成原因: 此问题发生是由于 DataContractSerializer 类遇到了一个它不支持的类型(Newtonsoft.Json.Linq.JToken)。在这种情况下,它会抛出异常,然后停止生成服务引用。
我没有引用该 JSON 库,但是根据该错误描述,我推断出我的某个引用库必须存在类似的问题。我认为我正在引用的库之一可能包含 DataContractSerializer 不支持的类型,它会抛出相同类型的异常,并且因此以同样的方式失败。
果然,我发现,在我的情况下,罪魁祸首是我自己的库之一,该库包括相同 WCF 服务的公共代理。我怀疑是那个公共代理引起了麻烦。无论如何,通过选择“在指定的引用程序集中重用类型”,然后选择除了那个库之外的所有程序集,服务引用会自动正确地生成代理类。

4

当您添加服务引用时: 引用 -> 添加新服务引用。点击高级按钮,取消选择“在所有引用的程序集中重用类型”选项。该选项有时会导致错误。


3

这里是主要问题。 问题的来源在于您无法在Visual Studio中找到“添加Web引用”。如果服务是asmx,则在我的情况下,它不会生成代理类,直到我找到了以下步骤 -> 点击“服务引用” -> 点击“高级” -> 在那里您将看到“添加Web引用”...提供您的服务URL,点击OK,问题解决。 希望这能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接