Hello, OK, I have checked in your patch in almost identical form in git master. I found that GET operation does not pass on .NET when GetRequestClientFormatter() is invoked, so I split it into another contract and marked the test as NotWorking (it haven't passed earlier anyways).
Thanks a lot for the patch :) Atsushi Eno On 2010/10/13 23:34, Frank Wilhelm wrote: > Hello, > > thank you for your review. I tried to use the style of the existing > code but I guess I missed some spaces. > > The problem with your modifications is that it defeats the purpose of > my patch. In .NET I can host a method with a definition like: > > [OperationContract] > [WebInvoke(UriTemplate="set?name={name}&value={value}")] > void Set(string name, string value); > > In Mono I couldn't. This is why I created the patch. With your > modifications the problem still exists, but now in a different place. > > ValidateStyleForMessageFormatter shouldn't reject a method like the > one above. Like the modified Validate method it should consider the > UriTemplate. In the method above there is no need to wrap because > everything is passed in the URI. That works for .NET and also works > for Mono if the validation is less restrictive. I think the major > problem with my patch is that it doesn't work if the UriTemplate is > null. With only that fixed the test RejectTwoParametersWhenNotWrapped > will not break and it also works for my purpose. > > I also checked the .NET behavior for WrappedRequest and > WrappedResponse. In .NET the BodyStyle WrappedRequest resolves > problems with multiple inputs and WrappedResponse with multiple > outputs. That is what I expected and it is the opposite to what is > done in ValidateStyleForMessageFormatter. > > So I created a new version that hopefully resolves all issues. > > On 12.10.2010 13:30, Atsushi Eno wrote: >> Hello, >> >> Thanks for the patch, I very much appreciate it. Though there were >> some problems in your patch. >> >> - your implementation had an assumptiopn that WebGetAttribute and >> WebInvokeAttribute has non-null UriTemplate. They can indeed be >> null. >> - Your change broke RejectTwoParametersWhenNotWrapped() in >> WebInvokeAttributeTest. It is because, in your >> WebHttpBehavior.Validate() >> change you just removed existing code that checked what this >> test exactly >> verifies i.e. invalid multiple arguments. You might think it is >> "very strange" >> and "wrong" but that's what .NET indeed does (looks like it is >> done in >> GetClientMessageFormatter() in current version of .NET though). >> - There was a couple of coding style fixage needed. You had right >> and wrong >> style, so I assume you might have already known the style, but >> in case you >> haven't, have a look at http://mono-project.com/Coding_Guidelines >> (I found this page was not linked from our "Contributing" page, >> which was >> our bad, just fixed it.) >> >> I'm attaching the modified fix here. It includes some additional >> tests. I'll commit the changes unless you have further comments. >> >> (As a cosmetic excuse, WebMessageBodyStyle.Bare was new in 3.5 SP1 >> AFAIR, so it was left ignorant in our implementation from 3.5 era.) >> >> Atsushi Eno >> >> On 2010/10/09 18:27, Frank Wilhelm wrote: >>> Hello Mono devs, >>> >>> I tried running my web service on Mono and ran into several issues. >>> I use the WebHttpBinding to create REST web services by hosting that >>> with the ServiceHost class. This works fine on .NET but the Mono >>> implementation of System.ServiceModel.Web shows very different, and >>> very limiting, behavior. So I decided instead of waiting for a fix I >>> try to track down the issues. Here is the first I discovered. >>> >>> The Validation of WebHttpBehavior is very limiting. If a POST >>> operation has several parameters it will only host them if you >>> define 'wrapped' body format. But this isn't required if the >>> parameters are passed in the UriTemplate. Also the requirements for >>> WrappedRequest and WrappedResponse look very strange. I have to wrap >>> my response if I have multiple input parameters? That looks wrong. >>> >>> I looked up in the MSDN what the Validate method does for .NET, and >>> then I tried to make the .NET implementation fail. It just doesn't >>> behave like specified in the documentation, it never fails no matter >>> what. >>> >>> I attach a patch that will make the Validate method less picky. It >>> will look for placeholders in the URI template and only after that >>> decides whether wrapping is needed or not. That is still more >>> restrictive than the .NET implementation but for me it looks like >>> the right thing to do. I also added a test that reproduces the problem. >>> >>> Please accept the patch and give me some feedback on what I can >>> improve for further contributions. >>> >>> >>> _______________________________________________ >>> Mono-devel-list mailing list >>> Mono-devel-list@lists.ximian.com >>> http://lists.ximian.com/mailman/listinfo/mono-devel-list _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list