Visual Studio basicHttpBinding and endpoint problems

I have a WPF application in VS 2008 with some web service references. For varying reasons (max message size, authentication methods) I need to manually define a number of settings in the WPF client's app.config for the service bindings.

Unfortunately, this means that when I update the service references in the project we end up with a mess - multiple bindings and endpoints. Visual Studio creates new bindings and endpoints with a numeric suffix (ie "Service1" as a duplicate of "Service"), resulting in an invalid configuration as there may only be a single binding per service reference in a project.

This is easy to duplicate - just create a simple "Hello World" ASP.Net web service and WPF application in a solution, change the maxBufferSize and maxReceivedMessageSize in the app.config binding and then update the service reference.

At the moment we are working around this by simply undoing checkout on the app.config after updating the references but I can't help but think there must be a better way!

Also, the settings we need to manually change are:

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
</security>

and:

<binding maxBufferSize="655360" maxReceivedMessageSize="655360" />

We use a service factory class so if these settings are somehow able to be set programmatically that would work, although the properties don't seem to be exposed.

Answers


Create a .Bat file which uses svcutil, for proxygeneration, that has the settings that is right for your project. It's fairly easy. Clicking on the batfile, to generate new proxyfiles whenever the interface have been changed is easy.

The batch can then later be used in automated builds. Then you only need to set up the app.config (or web.config) once. We generally separate the different configs for different environments, such as dev, test prod.

Example (watch out for linebreaks):

REM generate meta data
call "SVCUTIL.EXE" /t:metadata "MyProject.dll" /reference:"MyReference.dll"

REM making sure the file is writable
attrib -r "MyServiceProxy.cs"

REM create new proxy file
call "SVCUTIL.EXE" /t:code *.wsdl *.xsd /serializable /serializer:Auto /collectionType:System.Collections.Generic.List`1  /out:"MyServiceProxy.cs" /namespace:*,MY.Name.Space /reference:"MyReference.dll"

:)

//W


Rather than changing the generated endpoint, uou could add a second endpoint and binding definition with the configuration you need, then in your code just put the name of the new endpoint in your service client constructor.


Need Your Help

Terminal hangs when installing rb-rmagick

ruby-on-rails imagemagick ruby-on-rails-plugins

I'm trying to install rb-rmagick and running into some trouble. The installation stops at "Building rb-rmagick". I know it takes a while, so I let it run overnight, but still don't see any progre...