Yeah, note that NetPipeSyntaxFlags

http://referencesource.microsoft.com/System/R/88aaba2e83d81ad0.html

and thus NetTcpSyntaxFlags does not include UriSyntaxFlags.MayHaveUserInfo

so, they intended to not allow user:password in these Uris, or it is a
large oversight.


On 12 November 2015 at 14:33, Thomas Koster <[email protected]> wrote:
> On 11 November 2015 at 17:43, Thomas Koster <[email protected]> wrote:
>> I am parsing a URL to connect to a WCF service. Try this:
>>
>> new Uri("net.tcp://guest:guest@myserver:12345");
>>
>> I get a UriFormatException that complains about an invalid port
>> number. Uri.TryCreate is no better.
>>
>> It works if I remove the userinfo (credentials). It also works if I
>> don't use a scheme with a dot in it. I need both, however.
>>
>> As far as I can tell, this *is* a valid URI according to RFC 2396 and
>> RFC 3986. It works in Mono. It works in other languages. I think
>> .NET's URI parser is busted (Framework 4.5).
>
> On 12 November 2015 at 10:32, Thomas Koster <[email protected]> wrote:
>> Using UriBuilder to create this Uri is also broken. Try this:
>>
>> var ub = new UriBuilder();
>> ub.Scheme = "net.tcp";
>> ub.UserName = "guest";
>> ub.Password = "guest";
>> ub.Host = "myserver";
>> ub.Port = 12345;
>>
>> The Uri property getter for ub throws the same UriFormatException as above.
>
> On 12 November 2015 at 12:52, Mark Hurd <[email protected]> wrote:
>> Yeah, I tried a couple of variations on
>>
>> var ub = new UriBuilder("net+tcp://guest:guest@myserver:12345/")
>> ub.Scheme = "net.tcp"
>>
>> and ub.Uri property throws as you mention.
>
> This means UriBuilder is implementing the Uri property with something
> silly like this:
>
>     public Uri Uri
>     {
>        get
>        {
>            return new Uri(ToString());
>        }
>     }
>
> This suspicion is confirmed by the reference sources[1].
>
> The round-trip via string is wasteful and unnecessary and spreads the
> parsing bug in Uri over the UriBuilder class as well. UriBuilder
> should be able to trivially construct a Uri instance without parsing
> or round-tripping via string.
>
> Speaking of reference sources, I had a quick scan over the parsing
> code here[2]. OMG, it's thousands of lines of manual string twiddling,
> like a kid with no comp sci education might have done. The cyclomatic
> complexity must be astronomical. No wonder it's broken.
>
> [1] 
> http://referencesource.microsoft.com/#System/net/System/uribuilder.cs,b59ac7e3edbfe76c
> [2] http://referencesource.microsoft.com/#System/net/System/URI.cs
>
> --
> Thomas Koster



-- 
Regards,
Mark Hurd, B.Sc.(Ma.)(Hons.)

Reply via email to