GithubHelp home page GithubHelp logo

solidsoft-reply / esb-libraries Goto Github PK

View Code? Open in Web Editor NEW
0.0 0.0 2.0 45.47 MB

Libraries for dynamic service mediation. The libraries depend on the Microsoft BizTalk Server rules engine.

License: Apache License 2.0

C# 99.69% Batchfile 0.03% PowerShell 0.28%
biztalk biztalk-server csharp enterprise-service-bus esb rules-engine

esb-libraries's People

Contributors

cnayoung avatar solidsoftreplydevelopment avatar

Watchers

 avatar  avatar  avatar

Forkers

you-2016 tuga1975

esb-libraries's Issues

Explicit use of BAM continuation in orchestrations is perceived as 'wrong' by developers.

The ESB Libraries support a graduated approach to BAM when used in BizTalk orchestration code. At one end of the spectrum, the OnStep() method can be used to execute an entire Interceptor step at one location in the code. At the other end of the spectrum, developers can use BAM event streams, including the TrackpointDirectiveEventStream class and OESTrackpointEventStream provided by the ESB Libraries, to perform BAM actions without the use of Interception. Between these two extremes, the ESB Library event stream classes support two further models. The first allows developers to perform all the actions of a given type (e.g., all the updates defined in a step) at one location. The second allows the developers to perform certain BAM actions individually, but using configuration supplied by the Step.

These features are designed to make the ESB Libraries more useful when performing BAM in orchestrations. However, a further issue has been raised. When using the Step-driven approaches, developers naturally want to model different sets of actions as different steps that they can apply in different locations in a given orchestration. However, this necessitates the use of BAM continuation. This feels unnatural to developers, and requires additional work to manage continuation IDs.

For reasons I won't discuss in depth here, there is no sensible or safe alternative to using BAM continuation across multiple steps in a single orchestration. This has to do partly with the way the BAM Interceptor Framework works and partly with the fact that, even in a single orchestration, situations can potentially arise where updates could arrive out-of-order in the BAM primary import tables if continuation is not used.

Having recognised the underlying imperative to use BAM continuation, the question is "can the ESB Libraries be extended to make this continuation feel more 'natural' to developers". One approach would be to manage creation of continuation tokens and the performance of continuation in a more automated 'hidden' fashion. This would still need to be modelled in steps - e.g., by introducing an 'Extend a given activity' vocabulary definition that links a step to another step. In effect, the proposed mechanism will link continuation directly to directives, using each directive's knowledge of the current activity ID to manufacture continuations. This would be safe, because it would be based four-square on BAM continuation. However, it would also hide the use of continuation from the developer and provide them with a mechanism aligned closely to the use of directives, making the use of the libraries feel more natural.

WCF configuration required in BTSNTSvc.exe.config

Currently, the documented instructions mandate the use of WCF binding configuration in the BTSNTSvc,config.exe WCF file or any other relevant config file. In fact, there is some evidence that it is possible to rely on the recent enhancements in WCF 4 which support configuration-free binding. However, there is also evidence that this can be problematic. The code should be improved to handle bindings in code, rather than static configuration.

UDDI library should be optionally installed

The WiX installer should be enhanced to support optional installation of the UDDI library. This library is often not required. In the same way, the UDDI action vocabulary should be optionally installed

XML always indented by pipeline components

The pipeline components always indent XML content in messages. Although the XML is valid, this is not a good strategy for integration where a recipient may not be handling whitespace well, etc. The behaviour is caused by the use of the Save() method on XmlDocument.

To improve this, the code has now been changed to avoid formatting by default. However, formatting can be useful. The code has been extended to handle an additional XML formatting action in directives. This supports normalization of XML as well as indenting.

Problems building code - the PFX file used to sign assemblies is password-protected

The signing file is password-protected, and is a PFX file rather than the more normal .snk file. Assemblies must be strong-named for use in BizTalk Sever, but password protection of the key file is not appropriate for an open-source project. Without the password, certain problems cannot be addressed. For example, the UDDI unit tests depend on the use of the full public key to allow internal members to be made visible for test purposes.

Pipeline components fail with COM-related error when pipelines are re-configured in the Admin console

If one of the ESB service mediation disassembly pipeline components (not the Service Mediation component, but one of other components - XML, FF, BTF, EDI or AS2) is re-configured in a Receive Port using the BizTalk administration console, the next time the pipeline component is invoked, it fails with the following error:

COM object that has been separated from its underlying RCW cannot be used. The possible cause is invalid or malformed per instance configuration data.

The BizTalk application has to be redeployed to recover from this failure.

Inadequate logging to event log

The code does not log effectively to the event log. This is dependent on improvement to the WiX setup MSI to handle registration of event sources.

Code assumes all endpoints are specified using well-formed URIs

The code assumes that all routing endpoints are specified as well-formed URIs. This is a run-time validation test performed on directives. However, there is no such constraint in the real world. For example, a BizTalk Server Send Port may drop files into a folder using non-URI file path. This validation rules should be removed.

Further enhancements to Installer are required

The installer does not currently handle the following:

a) Selection of target folder for installing the Resolver Service and reference assemblies
b) Importing and publishing of the BRE vocabularies
c) Verification of the Application Pool account
d) Automatic adding of the Application Pool account to the appropriate Windows Groups for access to the Rules repository
e) Automatic configuration of BizTalk BTSNTSvc.exe.config files

This is a candidate list of enhancements which will be addressed in dues course.

BizTalk Server throws a 'WhereSelectArrayIterator not marked as serializable" error

On moving an expression shape that contains resolver code to a different location in an orchestration, the following serialization error started occurring.

'System.Linq.Enumerable+WhereSelectArrayIterator`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' in Assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable. StackTrace: at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter, SerializationBinder binder)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
at Microsoft.XLANGs.Core.ObjectSerializer._serialize(Object graph, StringLookup sl)
at Microsoft.XLANGs.Core.ObjectSerializer.SerializeStateManager(IStateManager stateMgr, StringLookup lookup)
at Microsoft.XLANGs.Core.Service.Persist(Boolean dehydrate, Context ctx, Boolean idleRequired, Boolean finalPersist, Boolean bypassCommit, Boolean terminate)
at Microsoft.XLANGs.Core.ServiceContext.PendingCommit(Boolean ignore, XMessage msg)
at Microsoft.XLANGs.Core.ExceptionHandlingContext.PendingCommit(Boolean ignoreCommit, XMessage msg)
at Microsoft.XLANGs.Core.ExceptionHandlingContext.PendingCommit(Boolean ignoreCommit, XMessage msg)
at Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.SendMessage(Int32 iOperation, XLANGMessage msg, Correlation[] initCorrelations, Correlation[] followCorrelations, Context cxt, Segment seg, ActivityFlags flags)
at GDIH.CustomerRef.Common.Orchestrations.ProcessCustomerReference.segment2(StopConditions stopOn)
at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)

Better error handling required for Service Mediation pipeline component loading

A problem with corrupted pipeline configuration highlighted the need for improvements to error handling in the Load() method of the Service Mediation pipeline component. The code should log friendly and informative errors related to individual properties, rather than low-level technical issues such as COM problems.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.