Sometimes my wishes do come true — looks like Red Octane is stepping up to the plate with a version of Guitar Hero II for the Xbox 360. Might finally be time to upgrade…
Author Archives: kenny
Vista and Http services
Vista is coming soon, and one of its new security features bears special mention due to its effect on the execution of Http-based services. User Account Control is a new feature that will have many former administrators running as a “standard user” by default. Running as a non-admin, developers can hit a permissions issue when opening an Http standalone service:
AddressAccessDeniedException: HTTP could not register URL http://+:80/myService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details).
That is because http.sys restricts the root namespace (i.e. “/”) to administrators only. By using the http.sys namespace security mechanism, you can delegate portions of the global namespace to be accessible by different groups (i.e. all local Users, Power Users, a single user such as REDMONDkennyw, etc). Traditionally this security integration would be done by your setup program at install time.
System.Net does not currently expose any managed APIs to manipulate http.sys security reservations, but Keith has posted some sample code on using these APIs from managed code.
In addition, on Vista administrators also have access to a brand new netsh extension. This extension is very useful for both diagnostics and configuration issues such as namespace delegation. It also takes care of simple SDDL conversion, so you can now have commands such as:
netsh http add urlacl url=http://+:80/myService user=DOMAINuser
Rather than having to use oh so readable SSID strings like D:(A;;GX;;;S-1-5-20)
.
Note that your code which is running either the netsh extension or the configuration APIs needs to be running under an administrator account in order to setup this reservation. Once the reservation (ACL delegation) has been made, future registrations (usages) of your URI can occur while running under any account that was authorized by the reservation.
Ziplocs are the New Towel
If Douglas Adams was writing The Hitchhiker’s Guide to the Galaxy today, I wonder if Dirk Gently would have needed to fit his 3oz towel inside of a Ziploc bag?
I’ll leave the Nalgene at home this weekend, but armed with a one-quart Ziploc bag at least I won’t need to buy a new tube of toothpaste at every destination!
Channel 9: Using WCF Tracing
End to end (E2E) tracing is a very useful tool for tracking down bugs that occur in a distributed system (such as Indigo). You can learn more about it from a new Channel 9 video on WCF tracing that features Laurence from the Tracing product team.
Setting Credentials for your HTTP Proxy
This question came up a few times while I was away for my honeymoon: “If I am using BasicHttpBinding or WsHttpBinding, how do I setup the credentials for my proxy?”
In my earlier post on HTTP proxies I noted that all of our transport security implementations (including HTTP proxy authentication) leverage the shared WCF-wide credential provisioning framework. As a result, it’s pretty straightforward to configure your proxy credentials. I think what trips people up is that we don’t have a separate “ProxyCredentials” object. Rather, both the proxy authentication and the ultimate server authentication access credentials from the same location (such as ChannelFactory
.Credentials
).
One limitation of this approach is that if you are using the same authentication scheme for your proxy and your server, then you have to use the same credentials (e.g. the same username and password for Basic Auth). This was a concious tradeoff we made for V1. If any of you have a scenario that is broken by this limitation I’d love to hear about it.
Honeymoon's Over…
…and I’m still getting used to the term “husband”.
Lauren‘s posted some pictures already, we’ll get the rest (and captions) up later this week.
Wildcard port matching
In my description of HostNameComparisonMode I neglected to explicitly mention how the wildcard-ness affects your port#. In short, we will ignore the port# in our match if you have chosen StrongWildcard
or WeakWildcard
, and we will include the port# in our match if you choose Exact
.
This behavior is especially useful when using network monitoring intermediaries. Let’s say you have an intermediary listening on TCP port 8080 that forwards traffic to your service on port 8081. The Via on the wire for net.tcp would be net.tcp://mymachine:8080/a/b/. When this intermediary forwards the packets to your service listening at port 8081, the request would succeed only for Wildcard bindings.
Actually setting up a intermediary takes a few more tweaks to your service and client that I’ll go into more detail about next week.
What IP Address(es) do we listen on?
When listening on any socket-based protocol (http, net.tcp, UDP, SMTP, etc), there are ultimately two items that contribute to where we listen: IP Address and Port.
Your port# is usually specified in the URI of your endpoint (see RFC 2396, section 3.2.2). If a port# is not specified then each URI scheme has the option of supporting a default port# (HTTP uses 80, HTTPS uses 443, net.tcp uses 808, etc.). You can also configure a WCF endpoint to listen on
any available port# for client-side or Discovery/registry purposes.
For WCF transports, your IP Address is specified in the same manner, though this may not be obvious on the surface. If you specify an IP Address in the hostname of your URI, then we will listen on that exact IP Address. For example, net.tcp://127.0.0.1/myservice/ will only receive traffic received on the IPv4 localhost interface.
If you do not specify an IP Address in your endpoint URI, then the transport will provide a set of default IP Addresses for listening. For net.tcp, we will listen on IP_ANY (both V4 and V6 where available). For http, we will use the http.sys IP Listen List, which also defaults to INADDR_ANY and INADDR6_ANY.
For routing traffic, wildcard semantics are in effect, which means that net.tcp://localhost/a/b and net.tcp://127.0.0.1/a/b will match the same set of incoming Messages. The difference is that the first URI is exposed to all interfaces/IP Addresses while the second URI is limited solely to 127.0.0.1.
Greenlake Bar and Grill (Seattle, WA)
Rating:
Tonight LL and I headed to the border of Greenlake and Ravenna to check out DeAnn’s new digs. Dinner plans entailed a quest to find a local restaurant for DeAnn to try. After an abortive attempt down Roosevelt to the Blue Onion Bistro (turns out they’re closed Sunday evenings), we made a loop around Greenlake’s east shore, settling in at the Greenlake Bar and Grill.
It looked like a nice spot — outdoor seating and an airy interior. Unfortunately the rest of our dining experience didn’t measure up to that initial impression. Our hostess told us our table would be about 10 minutes, and then promptly forgot about us. We took a quick self-tour and when we returned to the hostess desk she asked “Can I help you? Party of 2?” Never mind that we had just told her there were 3 of us just moments prior. No matter, we pressed on and were seated outdoors on the comfortable patio. Our waiter forgot about us for about 20 minutes, but when we finally placed our orders the food arrived quickly. The dishes were, on the whole, forgettable. My blackened fish tacos had good chunks of meat and decent flavoring, but no real kick as I would expect from a blackening rub (perhaps I was spoiled by our lunch at Gorditos earlier today). Lauren’s chicken sandwich was also just so-so, with a decently grilled chicken breast on a bun that tasted like Wonderbread and underwhelming “wasabi aioli”. I’ve gotten better Hummus and Baba Ghanoush from a can then we had with the Mediterranean Platter. Price-wise, the only thing that kept our bill somewhat reasonable was the 2-for-1 deal we have on the PRIME card.
All in all it dealt with the hunger pangs, and the outdoor seating was an enjoyable place to converse, but I’ll pass on by the Greenlake Bar and Grill next time I’m in the neighborhood.
Greenlake Bar and Grill
7200 E Greenlake Drive North
Seattle, WA
206-729-6179
Mistral (Seattle, WA)
Rating:
Last Tuesday was Vidya‘s 25th birthday. To celebrate this monumental occasion, Lauren and I surprised her with dinner at Mistral: the best restaurant in Seattle*. Given the occasion, we kept the camera and any notetaking at bay (I’ll post food pictures after my next meal there). It will have to suffice to say we wined and dined our way through sablefish, foie gras, duck, mushrooms, exotic cheeses, fruit custards, sauternes, white Burgundies, Bordeaux blends, and numerous foams.
William Belickis (the Executive Chef) has an amazing skill in the kitchen, and also happens to be an extremely nice person. What’s even more amazing is that I found out last night he’s allergic to a number of foods (including most seafood). It’s reminiscent of Beethoven writing symphonies in his deafened state.
Over the years I’ve had a number of amazing meals at Mistral. In 2005, when the kitchen missed a beat or two, I was wondering if Mistral was starting to lose its luster. Last night I found out that, William was working in Bangkok at the time, attempting to open “Mistral Thailand”. The Bangkok experiment turned out to be a bust, and Thailand’s loss is our gain — last night Mistral was hitting on all cylinders. They recently hired a new pastry chef, and the desserts have reached new heights of spendor. The food is reinvigorated, and ever course was a delight. This is the Mistral I remember from over the years, and I’m very happy to say that it’s back!
A meal at Mistral is a full evening (3 hours or more), and certainly carries a hefty price tag. But if you have an occasion to celebrate, close your eyes, open your wallet, and enjoy a sublime seven course experience of food and wine. It’s a night you will never forget.
TIP: You can also get to know William (and check out a smaller scale take on the food) at one of his Lunch classes. I’ve had a few enjoyable Saturday afternoons in Mistral’s kitchen learning how to stuff zucchini flowers or blend corn soup. The classes are reasonably priced, and also include a 3 course meal showcasing the dishes you learn about.
*I haven’t yet been to The Herb Farm which also has quite a following
UPDATE (10/15/2006): Went to the Herb Farm last night (thanks Ilene!). The food was very good, but I still attest that William’s restaurant deserves the Kenny crown for best Seattle restaurant
Mistral
113 Blanchard Street
Seattle, WA 98121
206-770-7799
5:30PM-midnight (Dinner only)