2013-07-17 56 views
5

我正在创建一个NuGet包,我想在这里使用两个Web服务。NuGet包:如何添加对web服务的引用?

我开始通过手动添加服务和修改配置文件的文件。但是当我浏览文件并更正引用时,我明白这种方法并不富有成效,特别是如果以后我需要更新Web服务和引用。我搜索解决方案,但几乎找不到有用的东西。

因此,我的问题是,什么是正确的方法添加到网络服务引用到NuGet包?

谢谢。

+0

我误解了,还是应该无法右键点击您的服务并执行“更新服务参考”? –

+1

从项目 - 是的。但我的想法是,如果我决定更新软件包,那么我还可以在那里快速添加/删除/更新Web服务。因此,使用我的软件包的人不应该知道某些Web服务需要更新。虽然,是的,我不确定这是如何工作的,但我对创建NuGet包颇为陌生。 – Anelook

回答

2

我选择的方法是使用svcutil来为Web服务生成代理类。然后,我可以使用这个代理类来访问Web服务,或者进一步创建基于它的dll,并在目标项目中引用此dll。

在情况下,它可能是有用的人,这里是PowerShell的代码创建一个基于web服务URL代理类和dll:

$className = "SomeClass"; 
$svcUri = "http://.../SomeWebService.svc?wsdl"; 
$csFile = $className + '.cs'; 
$dllName = [System.IO.Path]::Combine($temp, $className + ".dll") 
$svcUtilresult = & svcutil.exe /noConfig /out:$csFile $svcUri 
csc.exe /t:library /out:$dllName $csFile 
+0

我已经采取了类似的方法来处理我的工作中需要使用的Web API。我有几个库作为Web服务的“包装器”,以便我可以在一个项目中管理它,并使用NuGet将其加入其他库。 – Logarr

1

您可以使用Wsdl.exe用。如果你安装了Visual Studio,那么你应该可以在这里找到C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin或类似的路径,具体取决于你的精确版本。

微软文档非常简单https://msdn.microsoft.com/en-us/library/7h3ystb6%28VS.80%29.aspx

我发现这对于asmx Web服务更好,因为它生成的静态类与使用Visual Studio中的添加Web服务/更新Web服务功能生成的类精确匹配。您只需将由该工具生成的.cs文件添加到您的项目中,并删除您的Web引用。您可能需要将您的using引用更新为新的命名空间,但仅此而已。

由svcutil.exe生成的静态类更适合WCF服务,如果需要从命令行找到该工具,则该工具位于相同的目录中。