我想这是一个愚蠢的问题,但我很难找到类似的东西,所以也许这里有人可以把我推向正确的方向。
问题: 我有一个包含大量请求/响应类的c#SoapService,所以让我们说:
[WebService(Namespace = "http://fuu.bar.gov/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class Main : System.Web.Services.WebService
{
[SoapHeader("authentication")]
[WebMethod(Description = "Get Foo")]
public FooResponse GetFoo(FooRequest request)
{
return new FooResponse ();
}
[SoapHeader("authentication")]
[WebMethod(Description = "Get Bar")]
public BarResponse GetBar(BarRequest request)
{
return new FooResponse ();
}
}
public class FooResponse{};
public class FooRequest{};
public class BarResponse{};
public class BarRequest{};
因此,当我在客户端代码中创建名为“foobarWebservice”的WebReference时,我会得到:
foobarWebservice.FooResponse
foobarWebservice.FooRequest
foobarWebservice.BarResponse
foobarWebservice.BarRequest
类定义。
我想要的是将上述内容改为:
public class Main : System.Web.Services.WebService
{
[SoapHeader("authentication")]
[WebMethod(Description = "Get Foo")]
public Foo.Response GetFoo(Foo.Request request)
{
return new FooResponse ();
}
[SoapHeader("authentication")]
[WebMethod(Description = "Get Bar")]
public Bar.Response GetBar(Bar.Request request)
{
return new FooResponse ();
}
}
这很容易:
namespace Foo
{
public class Response{}
public class Request{}
}
namespace Bar
{
public class Response{};
public class Request{};
}
但客户端Reference.cs也应该给我这个:
foobarWebservice.Foo.Response
foobarWebservice.Foo.Request
foobarWebservice.Bar.Response
foobarWebservice.Bar.Request
所以我能够做到这一点:
foobarWebservice.Main webservice = new foobarWebservice.Main();
foobarWebservice.Foo.Request newRequest = new foobarWebservice.Foo.Request();
foobarWebservice.Foo.Response response = webservice.GetFoo(newRequest);
简单地说:我希望在客户端应用程序上生成的Reference.cs文件中保留我的命名空间。
答案 0 :(得分:0)
使用命名空间创建新程序集,并在客户端和服务器项目中使用它。在客户端项目中添加WCF引用时,请检查“使用现有程序集”#39;选项并检查添加的参考项目/程序集。
项目A:普通班级
项目B:WCF服务
项目C:WCF客户端。确保检查重用程序集选项。