[Mono-dev] Problems with System.ServiceModel.Web

Frank Wilhelm fwilhelm at nowisys.de
Wed Oct 13 10:34:38 EDT 2010


  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 at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: validate-operations-modified.patch
Url: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20101013/e667b4b4/attachment-0001.pl 


More information about the Mono-devel-list mailing list