A few days ago the WSE Adapter for BizTalk Server 2004 was released. How cool is this? Two great technologies strung together! Sweet.

While on the topic, one thing I noticed during the beta (which I haven't yet checked to see if it was fixed or not) was that the adapter used the Event Log to report errors during send and receive. This is good.

The bad part is that it might just try to create the event source at runtime
the first time, instead of only doing it during the adapter installation.
This has one unfortunate side effect. Usually, the users we'll be using for
running biztalk application will not have many privileges (and indeed should
not have administrative privileges on the machine).

Because of this, if the WSE adapter tries to register the event source, it
will fail because it does not have the necessary permissions. What's worse,
is that the returned error will hide the real error thats being logged, and
instead we'll get an error such as this:


Unhandled Exception: System.Web.Services.Protocols.SoapHeaderException:
System.Web.Services.Protocols.SoapHeaderException: Server unavailable, please try
later
---> System.Security.SecurityException: Requested registry access is not allowed.
at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable)
at System.Diagnostics.EventLog.CreateEventSource(String source, String logName, String machineName, Boolean useMutex)
at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID, Int16 category)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type)
at Microsoft.BizTalk.Adapter.WseReceiver.WseReceiver.Invoke(SoapEnvelope request, String methodName, String bodyTypeAssemblyQualifiedName, Boolean oneWay, Boolean isSsoEnabled, Object cookie)
at WseProcess.WseProcess_OrderProcess_OrderProcessSecurePort.FindOrder(SoapEnvelope request) in
D:\Inetpub\wwwroot\WseProcess_Proxy\WseProcess_OrderProcess_OrderProcessSecurePort.cs:line 34
--- End of inner exception stack trace ---
at
System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCal l)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at WseServiceClient.WseProcess.WseProcess_OrderProcess_OrderProcessSecurePort Wse.FindOrder(Int32 OrderId)
in c:\testprojects\wsesectest\wseserviceclient\web references\wseprocess\reference.cs:line 40
at WseServiceClient.Class1.Main(String[] args) in c:\testprojects\wsesectest\wseserviceclient\class1.cs:line 34

This was not very good, really. I'd much rather have the WSE Adapter
installer register the event source during installation so that we can
continue running our biztalk applications in non-priviledged accounts.
Hope this was changed :)


Tomas Restrepo

Software developer located in Colombia. Sr. PFE at Microsoft.