WCF contract changes that affect clients

前端 未结 5 1406
南笙
南笙 2021-02-01 10:31

I was curious if someone could outline which types of WCF contract (interface) changes on the server side would break a client trying to send in a message, and why. I believe W

相关标签:
5条回答
  • 2021-02-01 10:46

    Check out this article on dasBlonde: Versioning WCF Service Contracts

    It lists what changes will break existing clients:

    1. Remove operations
    2. Change operation name
    3. Remove operation parameters
    4. Add operation parameters
    5. Change an operation parameter name or data type
    6. Change an operation's return value type
    7. Change the serialized XML format for a parameter type (data contract) or operation (message contract) by explicitly using .NET attributes or custom serialization code
    8. Modify service operation encoding formats (RPC Encoding vs. Document Literal)

    This article by Michele explains in more detail how you can design contracts to be more flexible.

    0 讨论(0)
  • 2021-02-01 10:46

    OK. Question. Due to wrong naming syntax (parameter is specified with capital letter), I would like to adjust some code:

    [OperationContract]
    public void Foo(string Bar){}
    

    to

    [OperationContract]
    public void Foo(string bar){}
    

    Would adjusting the capital break contract?

    0 讨论(0)
  • 2021-02-01 10:57

    Design recommendations for contracts

    1. First version

      1.1. Carefully choose names for all contracts (interfaces, methods, classes and properties). These will be hard to change in future versions.

      1.2. Remember, that following cannot be changed in future: number of method parameters;type of parameters/return values/properties for types not under your control.

    2. Next version

      2.1. If already exists, do NOT change Namespace or Name parameter on any xxxContractAttribute.

      2.2. If already exists, do NOT change Order property of the DataMemberAttribute.

      2.3. Only following changes are allowed:

      • Add method (OperationContract) to interface (ServiceContract)

      • Rename method on interface

      • Rename class (DataContract)

      • Add property (DataMember) to class (DataContract)

      • Rename property on class

      2.4. Any deletion breaks compatibility.

      2.5. Any other change breaks compatibility.

    Here are few useful links:

    • WCF Versioning Guidelines
    • Service Versioning
    • Best Practices: Data Contract Versioning
    • Collection Types in Data Contracts
    0 讨论(0)
  • 2021-02-01 11:02

    "Add/remove parameters from an OperationContract" in WCF is not always something that can break your client, but you have to know what you do. In particular, adding new parameters to an operation contract will cause legacy clients not to pass them, and on the service side they will be set with their default values. Moreover, removing parameters from an operation contract, will be silent from the client point of view, and they will be simply ignored on the service side. Of course, changing parameter's name/type will cause the client to break.

    0 讨论(0)
  • 2021-02-01 11:02

    I think the best practice is to think of contracts as unbreakable, hmmm, contracts. Don't change them once they're published. It's easy enough to create a new contract with the changes you want, and to expose the new contract on a new endpoint.

    0 讨论(0)
提交回复
热议问题