标签: servicecontract

我可以在不更改服务的情况下更改WCF ServiceContract接口的命名空间吗?

有没有办法更改WCF ServiceContract接口的.NET命名空间,但仍然使WCF服务向后兼容使用旧的(命名空间除外)ServiceContract的客户端?例如,假设我(在vb.net中):

Namespace MyCompany.MyPoorlyNamedProject
    <ServiceContract(Name:="ThingService")> _
    <CLSCompliant(True)> _
    Public Interface IThingService
        ...
    End Interface
EndNamespace
Run Code Online (Sandbox Code Playgroud)

我想改变它

Namespace MyCompany.MyProject
    <ServiceContract(Name:="ThingService")> _
    <CLSCompliant(True)> _
    Public Interface IThingService
        ...
    End Interface
End Namespace
Run Code Online (Sandbox Code Playgroud)

根本不改变服务.

我试过这样做,但是我从wsdl引用的xsds显示了新的命名空间名称,这似乎是不兼容的.

有任何想法吗?

wcf servicecontract

9
推荐指数
1
解决办法
7740
查看次数

WCF合同更改会影响客户端

我很好奇是否有人可以概述服务器端哪些类型的WCF合同(接口)更改会破坏尝试发送消息的客户端,以及原因.我相信WCF可以处理某些差异,但我不确定你可以安全地改变什么,以及你不能做什么.

  • 从OperationContract添加/删除参数?
  • 添加/删除/更改DataContract的序列化属性?
  • 从ServiceContract添加/删除OperationContracts?

一位朋友在这里问了一个类似的问题

向WCF ServiceContract添加方法是否会破坏现有客户端?

编辑:正如John Saunders所指出的那样,改变合同通常不是一个好主意,但是内置的东西允许一些版本容忍(ExtensionDataObject等?).我想知道版本容差的灵活性.

wcf datacontract servicecontract operationcontract

9
推荐指数
1
解决办法
1万
查看次数

在WCF服务中重构God对象

我们god object在我们的系统中遇到了一个.该系统包括public service暴露给我们的客户,middle office serviceback office service.

流程如下:用户注册一些交易public service,然后经理middle office service检查交易并批准或拒绝交易,最后管理者back office service完成或拒绝交易.

使用我'这个词transaction,但实际上这些都是不同的类型,如操作的CRUD on entity1,CRUD on entiny2......不仅CRUD操作,但其他许多操作,例如approve/send/decline entity1,make entity1 parent/child of entity2等等...

现在WCF服务合同只是根据系统的那些部分分开.所以我们有3个服务合同:

PublicService.cs
MiddleOfficeService.cs
BackOfficeService.cs
Run Code Online (Sandbox Code Playgroud)

每个都有大量的运营合同:

public interface IBackOfficeService
{
    [OperationContract]
    void AddEntity1(Entity1 item);

    [OperationContract]
    void DeleteEntity1(Entity1 item);

    ....

    [OperationContract]
    void SendEntity2(Entity2 item);

    ....
}
Run Code Online (Sandbox Code Playgroud)

所有3项服务的运营合同数量已经达到2000个,每个服务合同约为600个.它不仅打破了最佳实践,而且只需更新服务引用就会非常痛苦,因为它需要很长时间.并且系统每天都在增长,并且在每次迭代中将越来越多的操作添加到这些服务中.

现在我们面临两难困境,因为我们如何将这些神服务分解为逻辑部分.有人说服务不应包含超过12~20次操作.其他人说一些不同的事情.我意识到没有黄金法则,但我希望听到一些关于此的建议.

例如,如果我只是按实体类型拆分这些服务,那么我可以在项目中获得大约50个服务端点和50个服务引用.在这种情况下,可维护性是什么?

还有一件事需要考虑.假设我选择了按实体拆分这些服务的方法.例如:

public …
Run Code Online (Sandbox Code Playgroud)

wcf soa servicecontract

9
推荐指数
1
解决办法
321
查看次数

WCF类在具有相同名称的不同服务契约中实现两个操作契约

我已宣布两项服务合同如下:

[ServiceContract]
public interface IContract1
{
    [OperationContract]
    double Add(int ip);
}

[ServiceContract]
public interface IContract2
{
    [OperationContract]
    double Add(double ip);
}
Run Code Online (Sandbox Code Playgroud)

我有一个实现这两个合同的类.我为这两个合同创建了两个端点.但我无法从客户端代码访问该服务.当我尝试更新服务引用时,它显示一个很大的错误:

元数据包含无法解决的错误....没有端点监听...等.

我知道你不能拥有两个OperationContract同名的s,但是有可能在不同的服务合同中有两个同名但签名不同的操作合同吗?

c# wcf multiple-inheritance servicecontract operationcontract

8
推荐指数
2
解决办法
5900
查看次数

WCF服务在2个不同的服务合同上公开2个端点

我有一个WCF服务,我试图配置,以便它在不同的URL下公开2个端点,引用不同的功能.

我想要的是Service1,暴露方法A,B,C和Service2,暴露方法D,E.我希望能够浏览localhost/WebServiceName/Service1/Service.svclocalhost/WebServiceName/Service2/Service .svc.

引用localhost/WebServiceName/Service1/Service.svc的其他应用程序应该只看到包含方法A,B和C的接口.它们不应该看到有关Service2接口的任何内容.而对于Service2同样如此.

到目前为止,我已经在我的WCF服务中定义了两个接口,I_Service1I_Service2.

我在web.config中添加了两个端点,如下所示:

<endpoint address="http://localhost/WebServiceName/Service1/" binding="wsHttpBinding" contract="WebServiceName.I_Service1" bindingConfiguration="Binding1" />
<endpoint address="http://localhost/WebServiceName/Service2/" binding="wsHttpBinding" contract="WebServiceName.I_Service2" bindingConfiguration="Binding2" />  
Run Code Online (Sandbox Code Playgroud)

在这里使用完整地址的建议来自这里:IIS下的多个端点

但是,我仍然无法浏览localhost/WebServiceName/Service1/Service.svc.我收到:

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. …
Run Code Online (Sandbox Code Playgroud)

c# wcf web-services endpoint servicecontract

7
推荐指数
1
解决办法
2万
查看次数

具有多个服务合同的单个端点

如何编写具有单个端点但具有多个服务合同的WCF Web服务?

例:

[ServiceContract]
public interface IWirelessService
{
    [OperationContract]
    void AddWireless();
}

[ServiceContract]
public interface IWiredService 
{
    [OperationContract]
    void AddWired();
}

[ServiceContract]
public interface IInternetService
{
    [OperationContract]
    void AddInternet();
}
Run Code Online (Sandbox Code Playgroud)

让我们认为IInternetService是我的主要Web服务,我想在其中实现IwiredService和IWirelessService,但我想在他们的类中实现.这可能吗?我怎么解决这个问题?

.net c# wcf servicecontract wcf-endpoint

5
推荐指数
1
解决办法
3755
查看次数

无法加载,因为它具有 System.ServiceModel.Channels.Message 类型的参数或返回类型或以下类型

所有,我在加载 WCF 服务时遇到以下错误。无法加载操作“GetEffort”,因为它具有 System.ServiceModel.Channels.Message 类型的参数或返回类型,或者具有 MessageContractAttribute 和其他不同类型参数的类型。使用 System.ServiceModel.Channels.Message 或带有 MessageContractAttribute 的类型时,该方法不得使用任何其他类型的参数。

这是服务合同

 [OperationContract]
 [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,
 BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/GetEffort?date={date}&empoyeeID={empoyeeID}")]
 Message GetEffort(DateTime date, int empoyeeID);
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么事。我看到类似的帖子说消息合同不匹配。但在这里我返回一个 Message 类型本身。

c# rest wcf servicecontract messagecontract

5
推荐指数
0
解决办法
7266
查看次数

WCF命名空间用法

好的 - 直接和简单的问题(2部分) - 寻找一个简单的答案.

在WCF服务合同中,您可以在合同上提供命名空间......

问题是这样的:第一个 - 为什么(对于真正...需要可靠的细节)是为合同命名空间命名约定选择的http://模型

第二 - 一旦设定,我该如何利用...像这样?这是在我的主人 -

    <endpoint ... contract="http://helloworld.com/example"></endpoint>
Run Code Online (Sandbox Code Playgroud)

wcf xml-namespaces servicecontract

4
推荐指数
1
解决办法
3127
查看次数

为什么WCF服务使用接口作为服务契约而不是抽象类?

这是我在接受采访时被问到的一个问题.

创建WCF服务时,您将获得两个文件; "IService.cs"和"Service.cs".为什么它是实现接口的类而不是继承抽象类的类.不回复说你不能在抽象类上放置[servicecontract]属性.我知道你只能将它应用于接口,但为什么呢?

wcf web-services servicecontract

4
推荐指数
2
解决办法
5219
查看次数

我可以在WCF ServiceContract中公开数据成员吗?

在WCF服务中,是否可以在ServiceContract定义中包含数据成员?做这样的事情:

namespace My.Service.Contracts
{
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        ResultObject[] Search(SearchParams searchParams);

        [DataMember]
        MyCustomClass MyDataMember { get; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以MyDataMember从ServiceContract内部公开吗?场景将如下所示:实现服务契约的以下类具有我想使用公共字段/属性公开的成员数据.看起来像这样的东西:我试图在实现服务合同的类中公开一个字段/属性.例如:

public class MyService : IMyService
{
    private MyCustomClass _datafield;

    ResultObject[] Search(SearchParams searchParams){
        //Do the search
    }

    MyCustomClass MyDataMember {
      get: { return _dataField; }
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# wcf datacontract servicecontract

4
推荐指数
1
解决办法
1289
查看次数

如何在wcf中使用MessageParameterAttribute

我想知道wcf中MessageParameterAttribute的用途是什么.

在我的功能:

[OperationContract]
public float GetAirfare(
[MessageParameter(Name=”fromCity”)] string originCity,
[MessageParameter(Name=”toCity”)] string destinationCity);
Run Code Online (Sandbox Code Playgroud)

我在实现中的任何地方甚至在使用服务时都不使用fromCity或toCity.那是什么意思给它一个名字?

wcf data-transfer servicecontract

3
推荐指数
1
解决办法
2106
查看次数

在运行时提供ServiceKnownType?

我在合同中使用了超过100个ServiceKnownType的WCF接口,如下所示:

[ServiceKnownType(typeof(RowUser))]
[ServiceKnownType(typeof(RowRegion))]
[ServiceKnownType(typeof(RowDocument))]
[... loads more ...]
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IServiceBrowse : IDisposable
{
  [OperationContract]
  void Insert(Row satz);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在运行时提供这些ServiceKnownTypes?
将所有这些ServiceKnownTypes添加到源代码中不仅容易出错且繁琐,它使我的程序集以我不喜欢的方式绑定在一起(我希望能够将这些类型提取到子组件中以将它们分离,但不能,因为服务需要列出所有已知的类型).

c# wcf servicecontract

3
推荐指数
1
解决办法
3001
查看次数

以编程方式发现ServiceHost的服务类型

天儿真好,

我试过在这里搜索MSDN,但我认为我不能这样做:

给定a的引用ServiceHost,是否有可能发现它正在执行的主机的类型?

就像是

ServiceHost host = new ServiceHost(typeof(MyContractImplementation));
Type serviceType = host.MagicCallHere();
Assert.True(typeof(MyContractImplementation) == serviceType);
Run Code Online (Sandbox Code Playgroud)

MagicCallHere存在吗?

奖励标记,如果你可以躲避反思...

.net c# wcf servicehost servicecontract

2
推荐指数
1
解决办法
777
查看次数