Service Contracts in Indigo

Don Box's Spoutlet

Syndication

The concept of a service contract is central to Indigo. In fact, its probably the single most important concept in terms of designing Indigo-based systems. 
 
Service contracts express valid message exchange patterns between two parties. The party that initiates communication is called the initiator. The other party is called the service. 
 
Service contracts specify one or more operation contracts. An operation contract represents an individual message exchange or a correlated request/reply message exchange.
 
Indigo allows service contracts to be expressed either in an XML format (specifically WSDL/1.1) or as annotated CLR interfaces. In reality, neither of these formats is the "native" contract format. Rather, we shred both formats into a simple in-memory tree structure that captures the "essence" of the contract.  To do "contract-first" development in Indigo, you can define your contracts in WSDL, in annotated CLR interfaces, or any domain-specific language you chose provided you have a way to turn that DSL into either WSDL or a CLR assembly.
 
Here's the simplest possible Indigo service contract expressed in C#:
 
[ServiceContract]
interface ContractOne
{
    [OperationContract(IsOneWay = true, Action="*")]
    void ProcessMessage(Message msg); // System.ServiceModel.Message is a built-in type in Indigo that means "untyped message"
}
 
This contract describes a simple message exchange pattern (MEP) in which the initiator may send any message it likes to the service. The messages are "one-way" in that there is no correlated reply. Moreover, the initiator will get control back from Indigo prior to the message being dispatched at the service, so this is truly asynchronous delivery with respect to the message receiver. 
 
To allow a given contract to distinguish between different kinds of messages, we treat the Action URI as a first class property of a message and allow each operation contract to indicate a specific URI used to match messages.  The ActionURI is the true external "name" of the operation as far as the contract is concerned. The choice of the local method name just that - a local choice that doesn't effect the external contract.  For example, consider this contract:
 
[ServiceContract]
interface ContractTwo
{
    [OperationContract(IsOneWay = true, Action="urn:crud:insert")]
    void ProcessInsertMessage(Message msg);
    [OperationContract(IsOneWay = true, Action="urn:crud:update")]
    void ProcessUpdateMessage(Message msg);
    [OperationContract(IsOneWay = true, Action="urn:crud:delete")]
    void ProcessDeleteMessage(Message msg);
    [OperationContract(IsOneWay = true, Action="*")]
    void ProcessUnrecognizedMessage(Message msg);
}
 
This contract expresses the simple "switch statement" in which there are three known message kinds (insert/update/delete) that will be used to route or dispatch the message appropriately.  Here's an example of how a service would take advantage of this:
 
class ServiceTwo : ContractTwo
{
    public void ProcessInsertMessage(Message msg) { /* do insert logic */ }
    public void ProcessUpdateMessage(Message msg) { /* do update logic */ }
    public void ProcessDeleteMessage(Message msg) { /* do delete logic */ }
    public void ProcessUnrecognizedMessage(Message msg) { /* do "default" logic for unrecognized messages */ }
}
 
Here's what's interesting about the way contracts work. 
 
The initiator (commonly called the "client") and the service (commonly called the "server") by definition have distinct definitions of the contract used to communicate.  With autonomous services, it's not practical to enforce CLR/JVM-style type unification on an Internet scale. For that reason, Indigo assumes that there is no centralized, authoritative contract definition.  Rather, a contract in Indigo is effectively a test one can perform on a given set of messages. Each party has their own "test" and provided the actual messages being exchanged satisfy both party's tests, there are no contract violations and all is well.
 
By way of example, consider a service that implemented ContractOne:
 
class ServiceOne : ContractOne
{
    public void ProcessMessage(Message msg) { /* do "default" logic for all messages */ }
}
 
Because all MEPs that adhere to ContractTwo also adhere to ContractOne, we can use a channel of type ContractTwo to talk to ServiceOne:
 
ContractTwo channel = ChannelFactory.CreateChannel<ContractTwo>(addressOfServiceOne);
channel.ProcessInsertMessage(CreateAnInsertMessage());
 
In this example, the insert message will be "routed" to the ServiceOne.ProcessMessage method body for processing.  Similarly, if we used a ContractOne channel to talk to ServiceTwo, messages whose action URI matched the insert, update, or delete operations would be routed appropriately to the service's Process[Insert|Update|Delete]Message operations. All other messages would be routed to the ProcessUnrecognizedMessage method body.
 
Most (but not all) services that go to the trouble of specifying action URIs also have some expectation on the message content. The two contracts we've looked at so far use System.ServiceModel.Message, which is the "untyped" message that makes no expectations about content other than the SOAP Envelope/Header/Body construct.
 
To allow messages to be easily "schematized", we can define a typed message using Indigo's [MessageContract] attribute as follows:
 
[MessageContract]
public class DeleteMessage {
  [MessageHeader] public int    UserID;
  [MessageHeader] public bool   NotifyOtherUsers;
  [MessageBody]   public string Justification;
}
 
[MessageContract]
public class UserDataMessage {
  [MessageHeader] public int      UserID;
  [MessageBody]   public string   Name;
  [MessageBody]   public DateTime DateOfBirth;
}
 
The [MessageHeader] attribute indicates that the field or property appears as a SOAP header block. The [MessageBody] attribute indicates that the field or property appears in the SOAP body. For example, the DeleteMessage above would yield the following SOAP message:
 
<S:Envelope>
  <S:Header>
    <ns:UserID>4252</ns:UserID>
    <ns:NotifyOtherUsers>true</ns:NotifyOtherUsers>
  </S:Header>
  <S:Body>
    <ns:Justification>This user is a troll.</ns:Justification>
  </S:Body>
</S:Envelope>
 
In order to define a service contract that uses these types, we simply change the parameter type from Message to our typed message types:
 
[ServiceContract]
interface ContractThree
{
    [OperationContract(IsOneWay = true, Action="urn:crud:insert", Style=ServiceOperationStyle.DocumentBare)]
    void ProcessInsertMessage(UserDataMessage msg);
    [OperationContract(IsOneWay = true, Action="urn:crud:update", Style=ServiceOperationStyle.DocumentBare)]
    void ProcessUpdateMessage(UserDataMessage msg);
    [OperationContract(IsOneWay = true, Action="urn:crud:delete", Style=ServiceOperationStyle.DocumentBare)]
    void ProcessDeleteMessage(DeleteMessage msg);
    [OperationContract(IsOneWay = true, Action="*")]
    void ProcessUnrecognizedMessage(Message msg);
}
 
To use this contract with a channel, we'd write the following code:
 
ContractThree channel = ChannelFactory.CreateChannel<ContractThree>(addressOfServiceOne);
 
UserDataMessage msg = new UserDataMessage();
msg.UserID = 4252;
msg.NotifyOtherUsers = true;
msg.Justification = "This user is a troll."
 
channel.ProcessInsertMessage(msg);
 
This "typed message" style of contract is actually the closest to the "native" contract system of Indigo. It's also the closest to the WSDL portType model.
 
As a convenience, Indigo allows you to declare an "anonymous" message type using the parameters of a given [OperationContract] method declaration:
 
[ServiceContract]
interface ContractFour
{
    [OperationContract(IsOneWay = true, Action="urn:crud:insert", Style=ServiceOperationStyle.DocumentBare)]
    void ProcessInsertMessage(
      [MessageHeader] int      UserID,
      [MessageBody]   string   Name,
      [MessageBody]   DateTime DateOfBirth
    );
    [OperationContract(IsOneWay = true, Action="urn:crud:update", Style=ServiceOperationStyle.DocumentBare)]
    void ProcessUpdateMessage(
      [MessageHeader] int      UserID,
      [MessageBody]   string   Name,
      [MessageBody]   DateTime DateOfBirth
    );
    [OperationContract(IsOneWay = true, Action="urn:crud:delete", Style=ServiceOperationStyle.DocumentBare)]
    void ProcessDeleteMessage(
      [MessageHeader] int    UserID,
      [MessageHeader] bool   NotifyOtherUsers,
      [MessageBody]   string Justification
    );
    [OperationContract(IsOneWay = true, Action="*")]
    void ProcessUnrecognizedMessage(Message msg);
}
 
As far as the external contract is concerned, ContractThree and ContractFour are identical. The only differences are "local" to the in-memory programming model.  If I use WS-MetadataExchange to ask your service for its contract, I can't tell the difference between ContractThree or ContractFour.
 
The upside of defining an anonymous message type using parameters is that the sender side is slightly smaller:
 
ContractFour channel = ChannelFactory.CreateChannel<ContractFour>(addressOfServiceOne);
channel.ProcessInsertMessage(4252, true, "This user is a troll.");
 
The downside is that the receiver doesn't have anything that captures all of the pieces of the message as a single unit.  Of course, because the external contract is identical, I could use ContractFour on the initiator side and use ContractThree on the service-side's implementation.
 
Now for the quiz.
 
Can I use ContractThree or ContractFour channels to talk to ServiceOne?  As far as Indigo is concerned, yes.  Indigo will happily dispatch any message to ServiceOne.ProcessMessage.
 
Can I use ContractThree or ContractFour channels to talk to ServiceTwo? As far as Indigo is concerned, yes.   The Process[Insert|Update|Delete]Message operations will receive messages that adhere to our typed message schemas. As long as that's what the service implementation actually expected, we're golden.
 
The interesting question is what happens if I use ContractOne or ContractTwo channels to talk to a service that implements ContractThree or ContractFour? 
 
For messages whose action URI doesn't match the three well-known Action URI, it's fine.  It gets routed to the ProcessUnrecognizedMessage method body just like before. 
 
If, however, the Action URI matches either of the three well-known URI, Indigo will attempt to validate the message and shred it into the appropriate fields or parameters. If the validation fails due to either a type mismatch (e.g., if the UserID element contains the string "fred") or due to MustUnderstand headers not being mapped, then Indigo will trap the error and not dispatch to your method.
 
Where are we?
 
We just looked how individual messages get expressed in Indigo contracts.
 
An indigo service contract describes a message exchange between two parties.
 
Indigo service contracts bind ActionURIs to the content of a message sent by each party.
 
Binding an action URI to System.ServiceModel.Message puts no restriction on message content as far as Indigo is concerned.  It's up to the apps to sort things out.
 
Using [MessageContract] or typed method parameters constrains the content of messages. Indigo will not only enforce these constraints, but it will also conveniently shred the indicated message parts into strongly typed fields, properties, or parameters.
 
Next time, we'll look at synchronous and asynchronous request/reply message exchange patterns.

Posted Feb 12 2005, 08:18 PM by don-box

Comments

Dan Davis wrote re: Service Contracts in Indigo
on 02-12-2005 4:18 PM
Very nice. Can't wait for the next installment.

This does make me wonder, though, about coupling of the service contract and the operation contract(s). Let's say an SOA is designed that genericizes a service in an ESB fashion. The service itself is relatively provides a runtime context and is little more than a container for dynamically loaded message handlers. These handlers are attributed as being able to handle messages with specific actions. Thus the service contract is never represented a runtime entity. Since the operation contracts exist only as dynamically loaded handlers, a WSDL definition cannot be generated from the codebase of the service. How might this be handled in Indigo?
Don Box wrote re: Service Contracts in Indigo
on 02-12-2005 4:54 PM
Dan,

I'm not quite sure what you mean by "an SOA that's designt to genericize a service in an ESB fashion."

I can say the following about how Indigo works.

You can trivially write expose an endpoint that reacts to any possible message. My ServiceOne above is the canonical example.

If you chose to load code based on message content (e.g., address, action, presense of a give header or element), you can do that pretty trivially. If that's what your interested in, let me know here and I'll try to put it on my queue of stuff to write about.

DB
Dan Davis wrote re: Service Contracts in Indigo
on 02-12-2005 5:14 PM
Don,

Thanks for the reply. Sorry to have been unclear. Looking back at the message I see I managed to mangle it before sending it out. It made a lot more sense in my head than it did after it came out!

That's the gist of what I was saying. A lot of examples I see of services these days still assume there's a simple code-level coupling of service and service operation. That is, a service is a class that contains a set of operations. This makes it easy to attribute the class as representing the service contract and its methods as implementing the operations.

I can see it being more flexible, though, to implement the service as a generic container and runtime environment for handlers that are loaded according to some configuration settings that say "this service called 'X' is this set of handlers." Each handler would represent a single action or a set of related actions. The service infrastructure would just pass messages to handlers by matching up handler attributes to message actions.

I can easily see how this could be put together using Indigo (and that's very cool), but service discovery is a different story, since the described architecture means that there's nothing to hang a [servicecontract] attribute on.

Hopefully that makes more sense than the first comment. <g>
Don Box wrote re: Service Contracts in Indigo
on 02-12-2005 5:28 PM
Dave,

Ignoring the discovery problem (for now), I believe what you're looking for would look something like this:

using KeyedHandler = KeyValuePair<
Predicate<Message>,
Action<Message>
>;

class ServiceAggregator : ServiceOne
{
static List<KeyedHandler> handlers = LoadFromConfig();

public void ProcessMessage(Message msg) {
foreach (KeyedHandler h in handlers)
if (h.Key(msg))
{
h.Value(msg);
break;
}
}
}

Yes?

Dan Davis wrote re: Service Contracts in Indigo
on 02-12-2005 5:47 PM
That's the general idea, except that the service class would not (if I'm understanding your example correctly) implement an interface that defines an underlying service contract. Instead, the set of operations the service can perform is defined solely by the set of handlers it loads from configuration. Every service would be just the sum of the handlers it is told by its configuration to load.

This sort of gnaws at ideas around software factories: To implement a service on this infrastructure a shop would do just three things: (1) create message content classes, (2) write message handlers and tag them with behavioral attribute, and (3) make configuration entries. Services would be created or augmented by manipulating those sets of handlers.
<savas:blog /> wrote I can't wait for Indigo
on 02-12-2005 6:55 PM
Don Box just posted an introduction to Service Contracts in Indigo. This is sooo very close to our latest WSE 2.0-based work that it'll be extremely easy to port our tools to Indigo when it's released. I really like the MessageContract stuff and the f...
中の技術日誌ブログ wrote Indigo MessageContract
on 02-12-2005 7:28 PM
Indigo MessageContract
Don Box wrote re: Service Contracts in Indigo
on 02-12-2005 7:31 PM
Dan,

If you look above, you'll note that "ContractOne" is the vaguest of all possible contracts.

You can send it anything.

In my little code frag in the previous comment, I'm assuming that the Predicate would only return true for messages that made sense to the target handler.

I'm not sure of your background, but to use a COM analogy, ServiceAggregator implements IDispatch and routes DISPIDs to subordinate targets.

Make sense?

DB
Matthias Ernst wrote re: Service Contracts in Indigo
on 02-13-2005 2:32 AM
> If the validation fails due to either a type
> mismatch (e.g., if the UserID element contains
> the string "fred") or due to MustUnderstand
> headers not being mapped, then Indigo will trap
> the error and not dispatch to your method.

Don, can you hoook into the validation process to express preconditions like "list length must be even" or "zip cannot be empty", things you might express in an elaborate schema?

Where does one draw the line between "message contract mismatch" and an application-level "ArgumentException"?

Matthias
Stefan Tilkov's Random Stuff wrote Indigo Programming
on 02-13-2005 5:06 AM
Don Box writes about Service Contracts in Indigo. The perfect mixture of typed and untyped models. A way to explicitly depend on part of the schema only. There&#8217;s even a Web services version of doesNotUnderstand! As far as programming models are concerned, this seems to be totally, absolutely, amazingly great....
Don Box wrote re: Service Contracts in Indigo
on 02-13-2005 6:01 AM
Matthias,

Yes, you can hook into our pipelines to add constraint enforcement beyond what we do already. This is a fairly obvious thing to do with our extensibility points (as ClemensV has shown in ASMX).

I would argue that ArgumentException and InvalidOperationException are two great examples of CLR signals of contract violations.

DB
Udi Dahan - The Software Simplist wrote Indigo patterns &amp; anti-patterns
on 02-13-2005 3:27 PM
"The Don" posted a great intro to using Indigo here, and there is one thing that I would like to call attention to. Although Don doesn't explicitly make this point, notice how all the contracts are INTERFACES. Yes, in Indigo, you'll get all the wonderful benefits of SOA as described by the gurus, WITHOUT losing the tried and true OO practices - namely coding to an interface instead of an implementation. Another thing that lurks among the text is this: if you find yourself writing 'switch' statements to multiplex commands, you're probably doing something wrong; call it the first(?) anti-pattern of Indigo. Indigo is most certainly the future for Microsoft platforms....
Mike Lorengo's Weblog wrote All Things Indigo - Indigo Resources I've Found
on 02-13-2005 6:22 PM
All Things Indigo - Indigo Resources I've Found
Marlon Smith wrote re: Service Contracts in Indigo
on 02-13-2005 7:11 PM
Can you give some details about Windows Activation Service (WAS) and what are it's reliabilty and service attributes.

Why I would use it rather than IIS 6.0?
Julien Boyreau wrote re: Service Contracts in Indigo
on 02-13-2005 10:38 PM
Yes ! Don Box is back !
I greatly find that this article focusing on "Contracts" is much better to seduce developers than the one from David Chappel.

Two comments however :
You define the "service contract" as an interaction between "parties" (I would prefer the more generic term "agents").
Why calling the second one "service" ? Would not it be less ambiguous to call it "service provider" ?
1) It would allow to explicitly decouple the "INTERFACE" from the "IMPLEMENTATION" of the interface.
2) It would pave the way to more complex "parties" (or "agents") cooperation, beyond request-response
3) It would state the concept of "Role" in a cooperation : "Client" is a "Role" played by one code AND "Service Provider" is a "Role" played by another code...By this way, you can for exemple run at "iso-service" (aka iso-contract") but dynamically attach "Requirments" to "Roles" (QoS, Security...).
Hartmut's Box wrote Indigo Programming Model
on 02-14-2005 3:26 AM
Don Box has given us another glimpse of Indigo. He is talking about untyped and typed implementation interfaces and Indigo channels. The presented programming model is one of the most sophisticated I&#8217;ve ever seen concerning web service development. I can&#8217;t...
Eric Giles wrote re: Service Contracts in Indigo
on 02-14-2005 5:33 AM
I am currently investigating concurrent validation using XML within the schema or messages. One thing I am trying to ascertain is how we can do complex validation on the client-side or at the service consumer.

Is there anything planned for Indigo that extends to complex validation that can be performed on the client prior to the message being submitted to the server? I am currently looking at Schematron and RelaxNG and very interested in where this might be going or if we are going to have to accept the trip to the server to do concurrent validation of the message.

Thanks in advance.

-Eric Giles
Scott Prugh wrote XSD/Schema Based Examples
on 02-14-2005 7:50 AM
Don,

Can we see some Indigo examples that use XSD's as the message type and then implement a service based on those gived schemas? Most of the work we are doing now needs to interoperate with other SOAP based middleware. So, in good 'contract-first' design we define all of our schemas(XSD) and WSDL up front and then generate C# and .ASMX bindings. It would be helpful to see how Indigo will handle importing given schemas.

Thanks,
-Scott Prugh
Emitter wrote Indigo news
on 02-14-2005 2:26 PM
Eric Giles wrote re: Service Contracts in Indigo
on 02-14-2005 2:55 PM
Scott,

Check out this entry by Christian relating to building Indigo service contracts from WSDL and XSD.

http://weblogs.asp.net/cweyer/archive/2005/02/14/372280.aspx

Hope this helps.

- Eric Giles
Mike Taulty's Weblog wrote Indigo ServiceContract's
on 02-14-2005 5:20 PM
XmlTeam's WebLog wrote MS Ignoring developer demand for REST tools?
on 02-15-2005 8:45 AM
XmlTeam's WebLog wrote MS Ignoring developer demand for REST tools?
on 02-15-2005 9:57 AM
Joe Wood wrote re: Service Contracts in Indigo
on 02-15-2005 11:22 AM
Great intro. Could you also delve into how Indigo maps XSD complex types into code. How it handles maxOccurs>1 etc.
Is there a real OX Mapper at the heart of the Indigo code generator?
...and how much of this will work in the March CTP?
Service Station, by Aaron Skonnard wrote Indigo sightings
on 02-16-2005 5:00 PM
Service Station, by Aaron Skonnard wrote Contracts define agreement
on 02-16-2005 7:38 PM
Service Station, by Aaron Skonnard wrote 5 things every Web service developer should know
on 02-16-2005 11:13 PM
Javier G. Lozano wrote Yet Another Indigo Post
on 02-17-2005 9:07 AM
JCooney.NET wrote What defines a Service Contract
on 02-17-2005 9:40 AM
JCooney.NET wrote What defines a Service Contract
on 02-17-2005 9:42 AM
Dion Hinchcliffe's Blog - Musings and Ruminations wrote Indigo: Bigger, Safer, Mature Service-Oriented Architecture
on 02-17-2005 10:04 PM
Dion Hinchcliffe's Blog - Musings and Ruminations wrote Indigo: Bigger, Safer, Mature Service-Oriented Architecture
on 02-17-2005 10:08 PM
notgartner.com: Mitch Denny's Blog wrote Service Contracts in Indigo
on 02-19-2005 7:55 PM
Joe Wood's Blog wrote OX Mapping - Mapping XML Schema to Classes Pt 2
on 02-21-2005 1:50 PM
OX Mapping - Mapping XML Schema to Classes Pt 2
bogdanel wrote Indigo preview
on 02-22-2005 8:37 AM
Don Box has an interesting article about the service concepts in Indigo. Read it here
Radovan Janecek: Nothing Impersonal wrote REST vs SOAP – Confusion continues
on 02-22-2005 11:57 AM
Next versions of Systinet Registry will support REST. Does it say anything about SOAP vs REST ? NO! Here I clarify some fundamental REST vs SOAP myths. Should industry give up the interoperability goal?!
Tiernans Comms Closet wrote Larkware
on 03-02-2005 7:29 AM
Jes wrote Indigo Contracts
on 03-07-2005 6:36 PM
TheWebFarm Blogs wrote DonBox on Indigo Service Contracts
on 03-14-2005 5:03 PM
TheWebFarm Blogs wrote Don Box on Indigo Service Contracts
on 03-14-2005 9:57 PM
Cordell Lawrence wrote re: Service Contracts in Indigo
on 03-15-2005 9:58 AM
Don, one word... WOW! Great stuff, been playing around with some WSE and trying to push my mind into the future as to messaging, services, contract-first MEP, I'm really loving what I'm seeing in Indigo.

"With autonomous services, it's not practical to enforce CLR/JVM-style type unification on an Internet scale. For that reason, Indigo assumes that there is no centralized, authoritative contract definition. Rather, a contract in Indigo is effectively a test one can perform on a given set of messages." ...

I especially find the above statement interesting in the flexibility that this allows with services and consumers of those service.

Again, great stuff, looking forward to more posts.
Stuart Celarier wrote Don Box writes about service contracts in Indigo
on 03-16-2005 10:50 AM
Don Box, architect on the Indigo team, explains Service Contracts in Indigo, a concept that is central to all of Indigo and, as he states, is "probably the single most important concept in terms of designing Indigo-based systems" ...
C#deSamurai wrote Indigo... resistance is futile
on 03-19-2005 4:32 PM
K. Scott Allen wrote Indigo Notes
on 03-29-2005 9:27 PM
K. Scott Allen wrote Indigo Notes
on 03-29-2005 9:29 PM
bob wrote re: Service Contracts in Indigo
on 05-02-2005 7:24 AM
try iis 5
Stefan Tilkov's Random Stuff wrote Web Services and Postel's Law
on 05-20-2005 3:19 PM
A recent discussion made me wonder why we insist to treat Web services in a way that ignores Postel&#8217;s Law. This is the name a statement originally made under the heading &#8220;Robustness Principle&#8221; in RFC 793 (hat tip to Mark Pilgrim) goes by: TCP implementations will follow a general principle of robustness: be conservative in what you do, be liberal...
Stefan Tilkov's Random Stuff wrote Messaging vs. RPC
on 09-11-2005 1:51 PM
Nothing like a nice pissing contest: Rich Turner and John Cavnar-Johnson go back and forth about how to do distributed programming the right way. The starting point was Rich&#8217;s whitepaper on Developing Distributed Services Today, to which John posted a somewhat less than favorable comment. Rich responded (a little childishly, IMO, even in the edited version); John followed up again....
Hartmut's Box wrote Is Microsoft doing the &quot;hide-the-paradigm-from-those-dumb-developer-idiots&quot; thing, again?
on 09-12-2005 5:31 AM
There is a &#8220;nice&#8221; discussion going on between Rich Turner and John CJ. Stefan already summarized and commented the highlights. If nothing else this post is intended to show that there is at least one reader of his blog, who...
Web Log di M.rkino wrote [My Indigo Steps] I primi passi e link utili ...
on 01-05-2006 5:59 AM
Web Log di M.rkino wrote [My Indigo Steps] I primi passi e link utili ...
on 01-05-2006 6:00 AM
Vishwa Rao wrote re: Service Contracts in Indigo
on 03-13-2006 1:16 PM
My Server sends xml validated by schema to a client and client modifies (deletes/modifies nodes/attributes) and sends revised xml it to server. I am thinking of using MessageContract.. I can put some authentication info in the MessageHeader. But how can I map XML Nodes along with attribute information to the MessageBody of MessageContract. The purpose is to let the other side reconstruct the XML Schema from MessageBody. Am I in the right track – Can someone help me?
Sam Gentile wrote Truckin' Along with Iteration 19 and Indigo/Contract First with Services BAT
on 04-18-2006 6:54 PM
Well, here we are busy as hell in Iteration 19 of the project. As I said here, we are now on weekly Iterations instead of 3 week Iterations. I have to admit we have been sinners; we have not been using Indigo in a Contract-First or even Service-Oriented way. We have been sort of concerned with whatever data our Smart Client needs, making that available at the Service endpoint and creating a method-style RPC call. That's really bad. Its not even Service-Oriented; its bleeding either service or client across explicit boundaries. We have not been using WCF well; we have just been using it as a glorified transport. I changed that today. I gave an hour and 1/2 presentation to our group; essentially Part 1 of my Advanced SOA with WCF Talk that I will give at DevTeach next month. [Read More]
Rüya Tabirleri wrote re: Service Contracts in Indigo
on 12-29-2007 8:50 AM
I dont understand this

ContractTwo channel = ChannelFactory.CreateChannel<ContractTwo>(addressOfServiceOne);
channel.ProcessInsertMessage(CreateAnInsertMessage());


??

ne gerek var?
TrackBack wrote prli bloglar payla??yorum - Webmaster Forum &amp; Webmaster Okulu
on 03-11-2008 2:45 PM
prli bloglar payla??yorum - Webmaster Forum & Webmaster Okulu
oyunlar wrote re: Service Contracts in Indigo
on 07-06-2008 3:39 AM

thanks all...

Lexapro. wrote Lexapro side effects.
on 08-14-2008 3:52 PM

Why does lexapro make me sleep all the time. Lexapro vitamins. Lexapro.

Ultracet. wrote Ultracet.
on 08-15-2008 2:51 AM

Ultracet addiction. Ultracet.

Add a Comment

(required)  
(optional)
(required)  
Remember Me?