"Invalid or malformed XML data" in a "good" binding file?

Topics: Bindings File, Settings Management and SSO
Dec 21, 2009 at 10:47 PM

Sorry I'm stuck again.  Doing a local deploy.

I copied a working binding file into PortBindingsMaster.xml.  I'm not using any if/replace statements yet.
I deleted the PortBindings.xml file just to be sure, than ran "Tools"/"Deploy BizTalk Solution".

Getting this error:

--------------

Deleting file "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\TFBIC.RCT.BizTalk_1.0_PortBindings.xml".
  Microsoft (R) BizTalk Application Deployment Utility Version 3.8.368.0
  Copyright (c) 2006 Microsoft Corporation. All rights reserved.
 
  Information: Importing bindings "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml" into application "TFBIC.RCT.BizTalk_1.0" in BizTalk configuration database (server="NXWTEST08BT1", database="BizTalkMgmtDb")...
  Error: Failed to update binding information.
  Invalid or malformed XML data.
   
  Command failed with 1 errors, 0 warnings.
 
C:\Program Files (x86)\MSBuild\DeploymentFrameworkForBizTalk\5.0\BizTalkDeploymentFramework.targets(1415,5): error MSB3073: The command "BTSTask.exe ImportBindings -Source:"C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml" -ApplicationName:TFBIC.RCT.BizTalk_1.0" exited with code 1.
Done Building Project "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\TFBIC.RCT.BizTalk.Deployment.btdfproj" (Deploy target(s)) -- FAILED.

Build FAILED.

---------------------

I remember in the prior release I used, we had to run "unwrap" bindings or something like that.  Is it still required?

Thanks,

Neal Walters

 

 

 

 

 

Coordinator
Dec 21, 2009 at 11:02 PM

Yes - there is a one-time step you go through with "ElementTunnel" to create "unwrapped" bindings (where various portions become nested xml rather than escaped xml.)

Dec 22, 2009 at 3:48 PM
Edited Dec 22, 2009 at 4:44 PM

Sorry, I'm not following how the "ElementTunnel" works.  Is it in the doc?

The doc says "manually deploy..using usual techniques, and the the BizTalk Deployment Wizard to export your binding files".
What does that mean?  Is that your wizard?  I just noticed that there is an "Import Binding" and a "Preprocess BizTalk Bindings" on the Tools/menu you insert in Visual Studio.  What does "Import Binding" do?  Import from where?

What I did above was Export my Bindings using BizTalk Admin Console and just copied/pasted into PortBindingsMaster.xml.

Also, just to clarify, is the PortBindingsMaster.xml or PortBinding.xml the one we put the If/endif statements in?

By the way, I'm an MCT and would volunteer to help you take your doc to the next level.

Thanks,
Neal

 

Coordinator
Dec 22, 2009 at 7:39 PM

Take a look at this discussion post for further information:

http://biztalkdeployment.codeplex.com/Thread/View.aspx?ThreadId=67885

 

And help on docs is always welcome - I'm sure Tom would agree.

Dec 22, 2009 at 8:19 PM

Ok, read that.  It briefly explains "ElementTunnel.exe" and what gets unwrapped and what does not. 

I still don't get the picture on what the two items on the VS/Tools menu do: "Import BizTalk Bindings" and "Preprocess BizTalk Bindings". 

The sample is great, but it doesn't explain how you got there.

So, from what I'm guessing so far, here are the steps:

1) Do "normal" binding.
2) Use BizTalk Admin Console to Export Binding file to PortBindings.xml
3) Run "ElementTunnel.exe" from the command prompt to generate PortBindingsMaster.xml using PortBindings.xml as input.
4) Try to deploy application as is. 

5) Identify what needs to be parameterized on different environments and add these variables by editing the SettingsFileGenerator.xml in Excel (even though it is an XML file it will open with Excel).6) Add XML If/Endif statements to PortBindingsMaster.xml
7) Make sure local deploy still works after changing PortBindingsMaster.xml
8) Build MSI file

I'm still dying on Step 4 above, probably because I didn't run ElementTunnel - about to go try that now.  But might be a waste of time if I have it all wrong. 

Thanks again,
Neal Walters

 

 

 

Coordinator
Dec 22, 2009 at 10:34 PM

If you set <ApplyXmlEscape>false</ApplyXmlEscape> in your .btdfproj, then the nested XML elements will not be "unwrapped" and the binding file out of BizTalk's Export Bindings should work as-is.  If you want to use the unwrapped form, then you need to unencode the nested XML elements manually or run ElementTunnel.exe /decode.  I often do it manually, because only the elements listed in DeployTools\adapterXPaths.txt are supported for "re-wrapping" the nested XML on the fly.

Once that is all deploying fine, then integrate the environment-specific replacement comments into your PortBindingsMaster.xml and edit the SettingsFileGenerator.xml in Excel to create the matching replacement values.  Then retest your deployment.

"Import BizTalk Bindings" imports the binding file into your BizTalk application, as if you did the same in BizTalk Admin.  Preprocess BizTalk Bindings "re-wraps" the nested XML and does environment-specific replacements in your PortBindingsMaster.xml to produce the PortBindings.xml.

As for documentation help, I feel very bad about the state of the documentation -- this has been a brutal year where best intentions of wrapping this up have continually collided with my job or other high priorities.  I assume you at least grabbed the updated documentation PDF on the Downloads page.  It is much better than the one included in the MSI.  One major documentation task includes listing out every MSBuild property we have and describing what it does and how to use it, based on the BizTalkDeploymentFramework.targets.  Any help getting started with that in a nice, easy to use format would be much appreciated.

Thanks,
Tom

Dec 23, 2009 at 4:47 PM

My goal with the doc would be to break it down into easier to follow-steps, so that a user could get up and running into maybe 2-4 hours or less, rather than multiple days and multiple forum posts. I used the prior version of BTDF for over a year, and I'm obviously struggling to get this version working.

Thanks for the info on "Import BizTalk Bindings".  Since the Tool was in Visual Studio, I was somehow thinking that it was Importing into Visual Studio the BizTalk Bindings.

Question 1: Do I have to conform to your BT Application Naming Convention?  For example, my BT App Name was "RCT".  I looked in the btdfproj, and found Project Name. 

Question 2: I'm still unclear what "Preprocess BizTalk Bindings" does.  Does this run the ElementTunnel program with the "encode" option?  If so, why not have the ElementTunnel with "Decode" on the Tool Bar?

Question 3: To confirm, this would be the normal way to run the elementTunnel?

elementtunnel.exe /i PortBindings.xml /o PortBindingsMaster.xml /x c:\BizTalkDeploymentFramework\Framework\DeployTools\adapterXPaths.txt /decode

Does everyone need to run elementTunnel?  Or just certain scenarios? 

I did that, made no changes to PortBindingMaster.xml, ran a deploy, and got this error: 

Information: Importing bindings "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml" into application "TFBIC.RCT.BizTalk_1.0" in BizTalk configuration database (server="NXWTEST08BT1", database="BizTalkMgmtDb")...
  Error: Failed to update binding information.
  Invalid or malformed XML data.

If I don't run the decode at all, and just copy PortBindings.xml to PortBindingsMaster.xml, I get the exact same error.

Question 4: So is the purpose of the decode that I decode, make my changes, and then re-encode before running a deploy? 

The documentation, that I can tell, never really describes the purpose of the PortBindingMaster.xml.   You talk about "lacing" in the if/endif, but don't specify which file to put those in. 

Documentation: I'll create a word doc and send you as I proceed and work through my errors. Or if you want to send me yours, you can turn on the word tracking features.  Obviously, you will have to spend some time to review what I write.  I could see changing the outline/table of contents.  One section for developers, one for deployers. 

Thanks,
Neal

 

Coordinator
Dec 24, 2009 at 8:58 PM

1.  <ProjectName> should be the name of the solution file without .sln, with the projects named as you see in BizTalkSample.  That's if you want the default behavior and naming.  If your naming of the projects is different, you'll have to override the default names in the <Orchestrations>, <Schemas>, etc. elements.

2.  Its input is PortBindingsMaster.xml.  It runs XmlPreprocess.exe to merge the environment settings into the binding file, runs ElementTunnel.exe to encode the nested XML fragments and updates the app name to product PortBindings.xml.

3.  Your command line looks right at a glance.  Please see my reply prior to your last post.  If you set <ApplyXmlEscape>false</ApplyXmlEscape> then ElementTunnel.exe is out of the picture.  If you set <UsingMasterBindings>false</UsingMasterBindings> then you can simply export the bindings from BizTalk into PortBindings.xml and go forward.  If you are using PortBindingsMaster.xml and <ApplyXmlEscape> is false, and you have not added any settings replacement comments for XmlPreprocess.exe into PortBindingsMaster.xml, then you again should be able to just export the bindings into PortBindingsMaster.xml and go forward.  Once you set <ApplyXmlEscape> true, then you need to decode the embedded XML in the locations from adaptersXPath.txt.  After you run the Preprocess Bindings step, you can do a file compare between PortBindings.xml and a copy directly exported from BizTalk.  If you find differences in how nested XML is encoded, then BizTalk won't import it successfully and you need to adjust your unencoded XML in the master bindings file until you get a match between the two files.

4.  Re-encoding happens automatically.  The only purpose of unencoding the nested XML is to give you a human-friendly way of editing it.  If you're comfortable changing the settings inside the encoded nested XML then don't even bother with the unencoding (<ApplyXmlEscape>).

Tom

Dec 28, 2009 at 4:39 PM
Edited Dec 28, 2009 at 6:50 PM

1.  Tom: <ProjectName> should be the name of the solution file without .sln, with the projects named as you see in BizTalkSample.  That's if you want the default behavior and naming.  If your naming of the projects is different, you'll have to override the default names in the <Orchestrations>, <Schemas>, etc. elements.

  Neal: Follow-up:  I was asking about the application name.  Does it have to be the project name?  For example, my application was called RCT.  So when I run the BTDF deploy, I have to stop and delete my old application first, otherwise it says that the same schemas are already deployed in another project. 

 

3.  Tom: Your command line looks right at a glance.  Please see my reply prior to your last post.  If you set <ApplyXmlEscape>false</ApplyXmlEscape> then ElementTunnel.exe is out of the picture.  If you set <UsingMasterBindings>false</UsingMasterBindings> then you can simply export the bindings from BizTalk into PortBindings.xml and go forward.  If you are using PortBindingsMaster.xml and <ApplyXmlEscape> is false, and you have not added any settings replacement comments for XmlPreprocess.exe into PortBindingsMaster.xml, then you again should be able to just export the bindings into PortBindingsMaster.xml and go forward.  Once you set <ApplyXmlEscape> true, then you need to decode the embedded XML in the locations from adaptersXPath.txt.  After you run the Preprocess Bindings step, you can do a file compare between PortBindings.xml and a copy directly exported from BizTalk.  If you find differences in how nested XML is encoded, then BizTalk won't import it successfully and you need to adjust your unencoded XML in the master bindings file until you get a match between the two files.

Neal Follow-up:  Here's what I did:

3a.  Set .btfdproj as follows:

    <ApplyXmlEscape>false</ApplyXmlEscape>
    <UsingMasterBindings>true</UsingMasterBindings>

3b.  Copied working binding file to both portBindings.xml and portBindingsMaster.xml.

3c.   Deployed with success. So now I want to add my if/then statements into the binding file. 

3d.  Change .btfdproj as follows:

    <ApplyXmlEscape>true</ApplyXmlEscape>
    <UsingMasterBindings>true</UsingMasterBindings>

3e. Ran this in the Deployment project folder

elementtunnel.exe /i PortBindings.xml /o PortBindingsMaster.xml /x c:\BizTalkDeploymentFramework\Framework\DeployTools\adapterXPaths.txt /decode

3f.  Ran side-by-side compare and see that the some elements got decoded, such as <TransportTypeData>

3g.  Ran deploy again (before adding if/then statements)

Get this error: 

Error: Failed to update binding information.
  Invalid or malformed XML data.

3h.  I noticed that the deploy itself changed portBindingsMaster.xml again.

3i.  I decided to run steps 3e-3g again, so I could see what it changed.  I saved a copy of portBindingsMaster.xml as portBindingsMaster1.xml so I could compare it after the deploy. 

Then I reran 3e-3g - and behold I was shocked it worked.   I'm not really sure what happened, unless some file was open and locked somehow that was preventing changes being made to it.

 

3j.  I'm curious why it made this change during the deploy:

Before Deploy: <SendPort Name="TFBIC.RCT.BizTalk_1.0_TFBIC.RCT.BizTalk_1.0_WcfSendPort_ComboService_WSHttpBinding_IComboService" IsStatic="true" IsTwoWay="true" BindingOption="1">

After Deploy:   <SendPort Name="TFBIC.RCT.BizTalk_1.0_TFBIC.RCT.BizTalk_1.0_TFBIC.RCT.BizTalk_1.0_WcfSendPort_ComboService_WSHttpBinding_IComboService" IsStatic="true" IsTwoWay="true" BindingOption="1">

3k.  Now I will go add my if/then/else statements...

 

5. (New Question) - What if I want to call my maps  ProjectName.Maps instead of ProjectName.Transforms? I have already switched because I couldn't find where to change it. Just curious. 

 

Thanks again,
Neal

Dec 28, 2009 at 5:19 PM

I feel like an idiot asking so many questions, especially after having used the old version of the framework for a year.

6. IF/THEN/ELSE issue

6a. I added the following to PortBindingsMaster.xml

<PrimaryTransport>
          <!-- ifdef ${_xml_preprocess} -->
          <!-- <Address>${FilePathRoot}\RCTOut\%MessageID%.xml</Address> -->
          <!-- else -->
          <Address>C:\BiztalkFiles\RCTOut\%MessageID%.xml</Address>
          <!-- endif -->  

6b.  I updated the spreadsheet.  Now the machine I'm using doesn't have Excel, so I update it on my local machine, then copy/paste the xml into my virtual machine:
C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\EnvironmentSettings\SettingsFileGenerator.xml

This shows I have defined a variable called "FilePathRoot":

         <Row>
                <Cell ss:StyleID="s80">
                    <Data ss:Type="String">FilePathRoot</Data>
                </Cell>
                <Cell ss:StyleID="s81">
                    <Data ss:Type="String">c:\biztalk</Data>
                </Cell>
                <Cell ss:StyleID="s81">
                    <Data ss:Type="String">c:\biztalk</Data>
                </Cell>
                <Cell ss:StyleID="s81"/>
                <Cell ss:StyleID="s81"/>
                <Cell ss:StyleID="s81"/>
            </Row>

6c.  I ran the Tools/Deploy, and get this error:

Error: Could not load binding information from XML file "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml".
  The file may not be a valid BizTalk binding information file.
  There is an error in XML document (227, 15).

 

That file shows:

<PrimaryTransport>
        <Address>
          <!-- filepathroot not defined -->\RCTOut\%MessageID%.xml</Address>
        <TransportType Name="FILE" Capabilities="11"

 

Question 6d: So, first I thought when you were doing a local deploy, that the "ifdef ${_xml_preprocess}" would be false, and the "else" branch would be used?

Question 6e: Even if that is not true, then not sure why it didn't find use the variable I set in my SettingsFileGenerator.xml.

I also ran the Tools/Preprocess, and can validate that it seemed to work:

as the local_settings.xml file contains this text:

<?xml version="1.0" encoding="utf-8"?>
<!--This file was generated on 12/28/2009 11:10 AM by EnvironmentSettingsExporter from SettingsFileGenerator.xml.-->
<settings>
  <property name="ssoAppUserGroup">BizTalk Application Users</property>
  <property name="ssoAppAdminGroup">BizTalk Server Administrators</property>
  <!--Retrieved at run time by the orchestration, to demonstrate that feature.-->
  <property name="SQLSERVER">(local)</property>
  <property name="FilePathRoot">c:\biztalk</property>
</settings>

Thanks again... I really do appreciate what this tool does.

Neal

 

Coordinator
Dec 28, 2009 at 7:52 PM

1.  Yes, the BizTalk application name is based on the project name.  Feel free to enter a suggestion on the Issue Tracker page to add a separate property for the application name and it can be considered for a future release.

3.  If you have UsingMasterBindings true, then the Framework generates (and overwrites) PortBindings.xml.  If you set it to false, then the Framework does not use PortBindingsMaster.xml at all and instead uses PortBindings.xml.  You have it true in this case, so any changes to PortBindings.xml will be immediately overwritten.  In either case, the Framework never modifies PortBindingsMaster.xml.

Using ApplyXmlEscape and the if/then environment-settings replacements are NOT related to each other.   ApplyXmlEscape causes nested XML to be re-encoded.  It doesn't have anything to do with the settings spreadsheet or if/then replacements.  You probably want to introduce one at a time since you're having some trouble with the format of PortBindings.xml.

The binding file format is very particular when it comes to nested XML encoding.  Sometimes there are subtle issues, because in some port configurations there is XML nested in XML nested in XML again.  Sometimes the innermost XML needs to be left encoded to avoid problems.  We've tried to capture that ordering from innermost to outermost in the order of the XPaths in the adapterXPaths.txt, but there are certainly some cases that we have never encountered, and thus haven't captured in the list of XPaths.

NOTE: there is a newer adapterXPaths.txt in the latest source code that is checked in.  The latest MSI has an older version.

3j.  EnableSideBySide is set to true, so the Framework is adding version info automatically to your app name and port names.  You can set it to false if you'd rather not have that behavior.

5.  Add a <Transforms> element and set its value to $(ProjectName).Maps

 

Coordinator
Dec 28, 2009 at 9:01 PM

6. From the sample's .btdfproj file, have you included and uncommented this line in your .btdfproj file?

    <!-- Set to a value if developer needs local version of environment settings. -->
    <DeveloperPreProcessSettings>$(MSBuildProjectDirectory)\EnvironmentSettings\local_settings.xml"</DeveloperPreProcessSettings>

If you don't include it, you won't end up using the local_settings.xml file at all.

Dec 28, 2009 at 9:44 PM
Edited Dec 29, 2009 at 4:23 PM

Question 7:  Ok, so what sets the ifdef to true or false?   

<!-- ifdef ${_xml_preprocess} -->

I thought when I was running "local" I didn't need a local binding file, that all the ifdef's would be false, and the "else" values would be used.

 

Also, you have a trailing double quote after local_settings.xml" in the sample file.  That yields this error:

     System.ArgumentException: Illegal characters in path.

At first, I thought it was the $(MS...).  Interesting that MSBuild uses $() parentheses but binding file uses ${} braces.

Fixed that...

 

For others, who might get the same errors, I then go this error: 

Error: Could not load binding information from XML file "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml".
  The file may not be a valid BizTalk binding information file.
  There is an error in XML document (229, 12).
  Unexpected node type Element. ReadElementString method can only be called on elements with simple or empty content. Line 229, position 12.

Line 229 is <CustomProps> highlighted below in bold (from my PortBindings.xml.

 

<TransmitPipeline Name="Microsoft.BizTalk.DefaultPipelines.PassThruTransmit" FullyQualifiedName="Microsoft.BizTalk.DefaultPipelines.PassThruTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="2" TrackingOption="ServiceStartEnd MessageSendReceive PipelineEvents" Description="" />
      <PrimaryTransport>
        <Address>c:\BizTalkFiles\RCTOut\%MessageID%.xml</Address>
        <TransportType Name="FILE" Capabilities="11" ConfigurationClsid="5e49e3a6-b4fc-4077-b44c-22f34a242fdb" />
        <TransportTypeData>
          <CustomProps>
            <UseTempFileOnWrite vt="11">0</UseTempFileOnWrite>
            <CopyMode vt="19">1</CopyMode>
            <FileName vt="8">Test_%MessageID%.xml</FileName>

To me, this looks the old encoding/decoding issue biting again.  But you said above "Re-encoding happens automatically.".

Just to clarify, I ran tunnelElement on PortBindings.xml, that built PortBindingMaster.xml.  I added the ifdef/else statements to PortBindingsMaster.xml. 

Then I discovered the issue.  I had to reset ApplyXmlEscape to "true". 

<ApplyXmlEscape>false</ApplyXmlEscape>

So "re-encoding happens automatically" is only true when this parm is set to true?

I think I got my first local deploy now.  It's "only" taken me about 2 full days (documenting while I go). 

Thanks again for the gentle guidance.

Neal

 

 

 

Coordinator
Dec 28, 2009 at 10:32 PM

XmlPreprocess.exe is always run on the binding file, with or without a master bindings file, to process the if/else's and merge environment-specific settings.  Even if you are running on your development machine, you are still running XmlPreprocess.exe every time you deploy.  If you don't explicitly set the <DeveloperPreProcessSettings> property, then devl_settings.xml is used by default.  ElementTunnel.exe (to re-encode nested XML) is run only when <ApplyXmlEscape> is true.

Sorry the extra double-quote was included again -- that fix to the sample was checked in last July.  I should really build a new MSI just to catch the minor things that have been fixed or added since May.

Of the first-time setup tasks, getting the nested XML in the master bindings file set up perfectly is always the trickiest piece.  When you have those situations with XML nested three levels deep and our adapterXpaths.txt doesn't know about one of them, the binding file comes out wrong and all you get is that "not a valid BizTalk binding file" error.

Glad to hear you got through it and thanks for sticking with it!

Tom

Dec 29, 2009 at 4:17 PM
Edited Dec 29, 2009 at 4:42 PM

Question 7 Redux:

I've totally gone backwards since yesterday. 

I tried an MSI deploy, and found that my in my WCF send ports, the BTSActionMapping fields were all empty, causing the application not to work.  (I'm not sure if this was my mistake, but I'm trying to reproduce the scenario to test).

I redid my bindings in BTAdmin Console to get them back to the way they should be, re-exported, and have spent the last two hours dealing with the exact same errors as started this thread. 

I have gone back to the simplest scenario possible, trying to get BTDF Tools/Deploy to work with my newest binding file with no changes to it for my parameters yet. 

If I set

<ApplyXmlEscape>true</ApplyXmlEscape>

1) Copy my binding file to PortBindings.xml

2) Run ElementTunnel.exe with PortBindings.xml in and PortBindingsMaster.xml out

3) Run Tools/Deploy, I get this error:

Information: Importing bindings "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml" into application "TFBIC.RCT.BizTalk" in BizTalk configuration database (server="NXWTEST08BT1", database="BizTalkMgmtDb")...
  Error: Failed to update binding information.
  Invalid or malformed XML data.
  Command failed with 1 errors, 0 warnings.

This is the unhelpful error that BizTalk import/bindings give.  I tried manually importing the same PortBindings.xml in BTAdminConsole, and it gives the same useless error. That's why I switched <ApplyXmlEscape> back to "false" in hopes of getting a useful error message.

If I copy my binding file to PortBindingsMaster.xml, don't do any ElementTunnel, it works. 

 

If I do the following, it get a more specific, but still confusing error:

1) Copy my binding file to PortBindings.xml

2) Run ElementTunnel.exe with PortBindings.xml in and PortBindingsMaster.xml out

3) Run Tools/Deploy

Current configuration in btdfproj

    <ApplyXmlEscape>false</ApplyXmlEscape>
    <UsingMasterBindings>true</UsingMasterBindings>

Information: Importing bindings "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml" into application "TFBIC.RCT.BizTalk" in BizTalk configuration database (server="NXWTEST08BT1", database="BizTalkMgmtDb")...
  Error: Could not load binding information from XML file "C:\Source\TFBIC.RCT.BizTalk\TFBIC.RCT.BizTalk.Deployment\PortBindings.xml".
  The file may not be a valid BizTalk binding information file.
  There is an error in XML document (229, 12).
  Unexpected node type Element. ReadElementString method can only be called on elements with simple or empty content. Line 229, position 12.

Note: This is identical to "Question 7" in post above, except I have not put any IFDEFs in the file.

<SendPort Name="RCTTestOut" IsStatic="true" IsTwoWay="false" BindingOption="1">
      <Description xsi:nil="true" />
      <TransmitPipeline Name="Microsoft.BizTalk.DefaultPipelines.PassThruTransmit" FullyQualifiedName="Microsoft.BizTalk.DefaultPipelines.PassThruTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Type="2" TrackingOption="ServiceStartEnd MessageSendReceive PipelineEvents" Description="" />
      <PrimaryTransport>
        <Address>C:\BiztalkFiles\RCTOut\Test_%MessageID%.xml</Address>
        <TransportType Name="FILE" Capabilities="11" ConfigurationClsid="5e49e3a6-b4fc-4077-b44c-22f34a242fdb" />
        <TransportTypeData>
          <CustomProps>                                                                                     <!-- this is line 229 -->
            <UseTempFileOnWrite vt="11">0</UseTempFileOnWrite>
            <CopyMode vt="19">1</CopyMode>
            <FileName vt="8">Test_%MessageID%.xml</FileName>
            <AllowCacheOnWrite vt="11">0</AllowCacheOnWrite>
          </CustomProps>
        </TransportTypeData>

 

This is the adapter.txt I'm using.  I verified it against the latest source code upload (I think), and it was identical.

/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceiveLocationTransportTypeData/CustomProps/AdapterConfig
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceiveLocationTransportTypeData/CustomProps/BindingConfiguration
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceiveLocationTransportTypeData
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceivePipelineData
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/SendPipelineData

/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData/CustomProps/StaticAction
/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData/CustomProps/AdapterConfig
/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData/CustomProps/BindingConfiguration
/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData
/BindingInfo/SendPortCollection/SendPort/ReceivePipelineData
/BindingInfo/SendPortCollection/SendPort/SendPipelineData

/BindingInfo/PartyCollection/Party/CustomData

My next step is to forget about ElementTunnel and attempt to "lace" the "IFDEF"s into the file "as is".  My only guess is that it's screwing me up somehow.  Results - so far, this worked as long as I set <ApplyXmlEscape>false (see P.S. below).

Thanks again,
NealWalters

P.S.  Still trying to understand exactly what <ApplyXmlEscape> does, in the case where I did not run ElementTunnel: 

when False:

<TransportTypeData>&lt;CustomProps&gt;&lt;UseTempFileOnWrite vt="11"&gt;0&lt;/UseTempFileOnWrite&gt;&lt;CopyMode vt="19"&gt;1&lt;/CopyMode&gt;&lt;FileName vt="8"&gt;Test_%MessageID%.xml&lt;/FileName&gt;&lt;AllowCacheOnWrite vt="11"&gt;0&lt;/AllowCacheOnWrite&gt;&lt;/CustomProps&gt;</TransportTypeData>

when True:

<TransportTypeData>&amp;lt;CustomProps&amp;gt;&amp;lt;UseTempFileOnWrite vt="11"&amp;gt;0&amp;lt;/UseTempFileOnWrite&amp;gt;&amp;lt;CopyMode vt="19"&amp;gt;1&amp;lt;/CopyMode&amp;gt;&amp;lt;FileName vt="8"&amp;gt;Test_%MessageID%.xml&amp;lt;/FileName&amp;gt;&amp;lt;AllowCacheOnWrite vt="11"&amp;gt;0&amp;lt;/AllowCacheOnWrite&amp;gt;&amp;lt;/CustomProps&amp;gt;</TransportTypeData>

In this case, the file created with the "True" parm is bad, because it has double wrapped, i.e. turned "&lt;" into "&amp;lt;".

 

 

 

Coordinator
Dec 29, 2009 at 9:52 PM

The process to follow for FIRST TIME setup is:

  1. Get the application deployed to BizTalk somehow, whether manually, with BizTalk's tools or using the Deployment Framework.  If you use the Framework, then your deploy script is expected to fail at the point of importing the bindings.  That's OK.
  2. Go into BizTalk Admin and manually configure all bindings.  Start the application and make sure everything is working.
  3. From BizTalk Admin, export the bindings to <yourProject>.Deployment\PortBindingsMaster.xml.
  4. Edit your .btdfproj file and ensure that <UsingMasterBindings> is true and <ApplyXmlEscape> is false.
  5. Deploy your solution in Visual Studio using Tools\Deployment Framework for BizTalk\Deploy BizTalk Solution.  It should succeed.  If not, you must fix the problem before continuing.
  6. Rename PortBindingsMaster.xml to PortBindingsKnownGood.xml
  7. Open a Command Prompt.  Run ElementTunnel.exe /i:PortBindingsKnownGood.xml /x:adapterXPaths.txt /o:PortBindingsMaster.xml /decode -- adding the appropriate directory paths to the filename parameters.  ElementTunnel.exe and AdapterXPaths.txt are in the Deployment Framework install folder under Framework\DeployTools.  Your PortBindingsMaster.xml now has selected nested XML fragments decoded into plain, unencoded XML, controlled by the XPath statements in AdapterXPaths.txt.
  8. Edit your .btdfproj file and ensure that <ApplyXmlEscape> is true.
  9. In Visual Studio with your solution open, run Tools\Deployment Framework for BizTalk\Preprocess BizTalk Bindings.
  10. Use WinMerge or your favorite file compare tool to compare PortBindings.xml (which was automatically generated in the previous step) to PortBindingsKnownGood.xml.  Any differences should be analyzed and understood.
  11. If there are any differences related to nested XML fragments, you probably need to manually re-encode some nested XML fragments in PortBindingsMaster.xml.  Sometimes there is XML nested inside XML nested inside XML.  One of those nested XML fragments may not have been processed automatically (by ElementTunnel.exe based on AdapterXPaths.txt).  You may need to fix it up manually.
  12. Keep adjusting the encoding of nested XML fragments in PortBindingsMaster.xml, re-running Preprocess BizTalk Bindings, and re-comparing PortBindings.xml and PortBindingsKnownGood.xml until all areas including encoded XML are an exact match.
  13. Only when you have a successful compare, proceed to Tools\Deploy BizTalk Solution, which should now fully succeed.

 

Dec 29, 2009 at 10:50 PM

Agreed (that's more or less what I put in the doc that I'm creating), but you have several improvements. 

I guess I'm not sure why Step 11 is needed.  Wouldn't all common issues with ElementTunnel.exe already have been encountered?
Your steps basically now read as ElementTunnel cannot be trusted. 

I'll continue back to Steps 7-11 tomorrow with a clear head.  I'm basically ready to forget about ElementTunnel as much problems as it has caused so far.
I'm thinking that in my case it is easier to deal with the unencoded entries than "manually re-encode" as you describe in step 11 above.

I'm also including steps in my doc for what to do when you need to add a port or change a port AFTER you have everything "laced" with IFDEFs and working.

Neal

 

Dec 30, 2009 at 2:43 PM
Edited Dec 30, 2009 at 2:46 PM

Your procedure of saving the PortBindingsKnownGood.xml was a great idea, so the good and bad can be compared (apples to apples). 

It's having problems with the BtsActionMapping on a normal everyday WCF Send Port.  It also seems to remove the namespace of BtsActionMapping.

Can a change be made to adapterXPaths.txt fo fix?  If not, I prefer leaving <ApplyXmlEscape> to False and forgetting the encoding/decoding.  That would be much easier than trying to manually untangle what is below.

 

PortBindings.xml

<TransportTypeData>&lt;CustomProps&gt;&lt;ServiceCertificate vt="8" /&gt;&lt;UseSSO vt="11"&gt;0&lt;/UseSSO&gt;&lt;InboundBodyPathExpression vt="8" /&gt;&lt;MessageClientCredentialType vt="8"&gt;Windows&lt;/MessageClientCredentialType&gt;&lt;SendTimeout vt="8"&gt;00:01:00&lt;/SendTimeout&gt;&lt;OutboundXmlTemplate vt="8"&gt;&amp;lt;bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="xml"/&amp;gt;&lt;/OutboundXmlTemplate&gt;&lt;OpenTimeout vt="8"&gt;00:01:00&lt;/OpenTimeout&gt;&lt;Identity vt="8"&gt;&amp;lt;identity&amp;gt;
  &amp;lt;dns value="localhost" /&amp;gt;
&amp;lt;/identity&amp;gt;&lt;/Identity&gt;&lt;AlgorithmSuite vt="8"&gt;Basic256&lt;/AlgorithmSuite&gt;&lt;SecurityMode vt="8"&gt;Message&lt;/SecurityMode&gt;&lt;TransportClientCredentialType vt="8"&gt;Windows&lt;/TransportClientCredentialType&gt;&lt;TextEncoding vt="8"&gt;utf-8&lt;/TextEncoding&gt;&lt;NegotiateServiceCredential vt="11"&gt;-1&lt;/NegotiateServiceCredential&gt;&lt;MaxReceivedMessageSize vt="3"&gt;65536&lt;/MaxReceivedMessageSize&gt;&lt;ClientCertificate vt="8" /&gt;&lt;ProxyUserName vt="8" /&gt;&lt;CloseTimeout vt="8"&gt;00:01:00&lt;/CloseTimeout&gt;&lt;ProxyToUse vt="8"&gt;Default&lt;/ProxyToUse&gt;&lt;EnableTransaction vt="11"&gt;0&lt;/EnableTransaction&gt;&lt;InboundBodyLocation vt="8"&gt;UseBodyElement&lt;/InboundBodyLocation&gt;&lt;InboundNodeEncoding vt="8"&gt;Xml&lt;/InboundNodeEncoding&gt;&lt;EstablishSecurityContext vt="11"&gt;-1&lt;/EstablishSecurityContext&gt;&lt;StaticAction vt="8"&gt;&lt;BtsActionMapping&gt;&lt;Operation Name="GetPropertyInfoSourceRecordPolicyNum" Action="http://tempuri.org/IValuationService/GetPropertyInfoSourceRecordPolicyNum" /&gt;&lt;Operation Name="ExportValuationPolicyNumber" Action="http://tempuri.org/IValuationService/ExportValuationPolicyNumber" /&gt;&lt;Operation Name="ExportValuationPolicyNumberCustom" Action="http://tempuri.org/IValuationService/ExportValuationPolicyNumberCustom" /&gt;&lt;Operation Name="ExportValuationRecordId" Action="http://tempuri.org/IValuationService/ExportValuationRecordId" /&gt;&lt;Operation Name="ExportValuationRecordIdCustom" Action="http://tempuri.org/IValuationService/ExportValuationRecordIdCustom" /&gt;&lt;/BtsActionMapping&gt;&lt;/StaticAction&gt;&lt;PropagateFaultMessage vt="11"&gt;-1&lt;/PropagateFaultMessage&gt;&lt;ProxyAddress vt="8" /&gt;&lt;MessageEncoding vt="8"&gt;Text&lt;/MessageEncoding&gt;&lt;OutboundBodyLocation vt="8"&gt;UseBodyElement&lt;/OutboundBodyLocation&gt;&lt;/CustomProps&gt;</TransportTypeData>

PortBindingsKnownGood.xml

<TransportTypeData>&lt;CustomProps&gt;&lt;ServiceCertificate vt="8" /&gt;&lt;UseSSO vt="11"&gt;0&lt;/UseSSO&gt;&lt;InboundBodyPathExpression vt="8" /&gt;&lt;MessageClientCredentialType vt="8"&gt;Windows&lt;/MessageClientCredentialType&gt;&lt;SendTimeout vt="8"&gt;00:01:00&lt;/SendTimeout&gt;&lt;OutboundXmlTemplate vt="8"&gt;&amp;lt;bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="xml"/&amp;gt;&lt;/OutboundXmlTemplate&gt;&lt;OpenTimeout vt="8"&gt;00:01:00&lt;/OpenTimeout&gt;&lt;Identity vt="8"&gt;&amp;lt;identity&amp;gt;
  &amp;lt;dns value="localhost" /&amp;gt;
&amp;lt;/identity&amp;gt;&lt;/Identity&gt;&lt;AlgorithmSuite vt="8"&gt;Basic256&lt;/AlgorithmSuite&gt;&lt;SecurityMode vt="8"&gt;Message&lt;/SecurityMode&gt;&lt;TransportClientCredentialType vt="8"&gt;Windows&lt;/TransportClientCredentialType&gt;&lt;TextEncoding vt="8"&gt;utf-8&lt;/TextEncoding&gt;&lt;NegotiateServiceCredential vt="11"&gt;-1&lt;/NegotiateServiceCredential&gt;&lt;MaxReceivedMessageSize vt="3"&gt;65536&lt;/MaxReceivedMessageSize&gt;&lt;ClientCertificate vt="8" /&gt;&lt;ProxyUserName vt="8" /&gt;&lt;CloseTimeout vt="8"&gt;00:01:00&lt;/CloseTimeout&gt;&lt;ProxyToUse vt="8"&gt;Default&lt;/ProxyToUse&gt;&lt;EnableTransaction vt="11"&gt;0&lt;/EnableTransaction&gt;&lt;InboundBodyLocation vt="8"&gt;UseBodyElement&lt;/InboundBodyLocation&gt;&lt;InboundNodeEncoding vt="8"&gt;Xml&lt;/InboundNodeEncoding&gt;&lt;EstablishSecurityContext vt="11"&gt;-1&lt;/EstablishSecurityContext&gt;&lt;StaticAction vt="8"&gt;&amp;lt;BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;
  &amp;lt;Operation Name="GetPropertyInfoSourceRecordPolicyNum" Action="http://tempuri.org/IValuationService/GetPropertyInfoSourceRecordPolicyNum" /&amp;gt;

  &amp;lt;Operation Name="ExportValuationPolicyNumber" Action="http://tempuri.org/IValuationService/ExportValuationPolicyNumber" /&amp;gt;
  &amp;lt;Operation Name="ExportValuationPolicyNumberCustom" Action="http://tempuri.org/IValuationService/ExportValuationPolicyNumberCustom" /&amp;gt;
  &amp;lt;Operation Name="ExportValuationRecordId" Action="http://tempuri.org/IValuationService/ExportValuationRecordId" /&amp;gt;
  &amp;lt;Operation Name="ExportValuationRecordIdCustom" Action="http://tempuri.org/IValuationService/ExportValuationRecordIdCustom" /&amp;gt;
&amp;lt;/BtsActionMapping&amp;gt;&lt;/StaticAction&gt;&lt;PropagateFaultMessage vt="11"&gt;-1&lt;/PropagateFaultMessage&gt;&lt;ProxyAddress vt="8" /&gt;&lt;MessageEncoding vt="8"&gt;Text&lt;/MessageEncoding&gt;&lt;OutboundBodyLocation vt="8"&gt;UseBodyElement&lt;/OutboundBodyLocation&gt;&lt;/CustomProps&gt;</TransportTypeData>

Thanks,

Neal Walters

 

Jan 4, 2010 at 5:06 PM
Edited Jan 4, 2010 at 5:09 PM

So do you think an update to AdapterXPaths.txt can "fix" this, or it's just the way it is?

I believe anyone using WCF SendPort will have the exact same error.  I'm able to move on by just adding the IFDEFs in an undecoded file (i.e. one not touched by ElementTunnel).

Neal

 

Coordinator
Jan 5, 2010 at 3:50 PM

If I'm remembering correctly, I usually leave BtsActionMapping encoded in the master bindings file.  It's not something that you are editing too often, and I've found that it is a bit sensitive to line breaks.  It's important that there is no line break after <BtsActionMapping> before the inner XML starts.  I'll have to try (or you can try) adding it to adapterXPaths.txt and see if it comes out in a format that BizTalk likes.  With this particular element it usually imports fine, but if you have a line break, when you look at the mappings through the admin UI they are a bit off.

Tom

Jul 22, 2010 at 7:05 PM
Edited Jul 22, 2010 at 7:10 PM

I've been avoiding ElementTunnel due to the problem above, and this week I got brave and decided to try it again, but again got bit. 

 

My PortBindingMaster.xml has this, which matches the Exported BindingFile: 

        <TransportTypeData>&lt;CustomProps&gt;&lt;PropagateFaultMessage vt="11"&gt;-1&lt;/PropagateFaultMessage&gt;&lt;OutboundBodyLocation vt="8"&gt;UseBodyElement&lt;/OutboundBodyLocation&gt;&lt;StaticAction vt="8"&gt;&amp;lt;BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;
  &amp;lt;Operation Name="BizTalkInsertComonError" Action="TypedProcedure/dbo/BizTalkInsertComonError" /&amp;gt;
&amp;lt;/BtsActionMapping&amp;gt;&lt;/StaticAction&gt;&lt;BindingConfiguration vt="8"&gt;&amp;lt;binding name="SqlAdapterBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" maxConnectionPoolSize="100" encrypt="false" workstationId="" useAmbientTransaction="true" batchSize="20" polledDataAvailableStatement="" pollingStatement="" pollingIntervalInSeconds="30" pollWhileDataFound="false" notificationStatement="" notifyOnListenerStart="true" enableBizTalkCompatibilityMode="true" chunkSize="4194304" inboundOperationType="Polling" useDatabaseNameInXsdNamespace="false" allowIdentityInsert="false" enablePerformanceCounters="false" xmlStoredProcedureRootNodeName="" xmlStoredProcedureRootNodeNamespace="" /&amp;gt;&lt;/BindingConfiguration&gt;&lt;InboundNodeEncoding vt="8"&gt;Xml&lt;/InboundNodeEncoding&gt;&lt;UseSSO vt="11"&gt;0&lt;/UseSSO&gt;&lt;BindingType vt="8"&gt;sqlBinding&lt;/BindingType&gt;&lt;InboundBodyLocation vt="8"&gt;UseBodyElement&lt;/InboundBodyLocation&gt;&lt;OutboundXmlTemplate vt="8"&gt;&amp;lt;bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="xml"/&amp;gt;&lt;/OutboundXmlTemplate&gt;&lt;Identity vt="8" /&gt;&lt;/CustomProps&gt;</TransportTypeData>

I have these two BTDFPROJ items set:

    <ApplyXmlEscape>true</ApplyXmlEscape>
    <UsingMasterBindings>true</UsingMasterBindings>

and the PortBinding.xml file generated has this:

        <TransportTypeData>&amp;lt;CustomProps&amp;gt;&amp;lt;PropagateFaultMessage vt="11"&amp;gt;-1&amp;lt;/PropagateFaultMessage&amp;gt;&amp;lt;OutboundBodyLocation vt="8"&amp;gt;UseBodyElement&amp;lt;/OutboundBodyLocation&amp;gt;&amp;lt;StaticAction vt="8"&amp;gt;&amp;amp;lt;BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;amp;gt;
  &amp;amp;lt;Operation Name="BizTalkInsertComonError" Action="TypedProcedure/dbo/BizTalkInsertComonError" /&amp;amp;gt;
&amp;amp;lt;/BtsActionMapping&amp;amp;gt;&amp;lt;/StaticAction&amp;gt;&amp;lt;BindingConfiguration vt="8"&amp;gt;&amp;amp;lt;binding name="SqlAdapterBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" maxConnectionPoolSize="100" encrypt="false" workstationId="" useAmbientTransaction="true" batchSize="20" polledDataAvailableStatement="" pollingStatement="" pollingIntervalInSeconds="30" pollWhileDataFound="false" notificationStatement="" notifyOnListenerStart="true" enableBizTalkCompatibilityMode="true" chunkSize="4194304" inboundOperationType="Polling" useDatabaseNameInXsdNamespace="false" allowIdentityInsert="false" enablePerformanceCounters="false" xmlStoredProcedureRootNodeName="" xmlStoredProcedureRootNodeNamespace="" /&amp;amp;gt;&amp;lt;/BindingConfiguration&amp;gt;&amp;lt;InboundNodeEncoding vt="8"&amp;gt;Xml&amp;lt;/InboundNodeEncoding&amp;gt;&amp;lt;UseSSO vt="11"&amp;gt;0&amp;lt;/UseSSO&amp;gt;&amp;lt;BindingType vt="8"&amp;gt;sqlBinding&amp;lt;/BindingType&amp;gt;&amp;lt;InboundBodyLocation vt="8"&amp;gt;UseBodyElement&amp;lt;/InboundBodyLocation&amp;gt;&amp;lt;OutboundXmlTemplate vt="8"&amp;gt;&amp;amp;lt;bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2007" encoding="xml"/&amp;amp;gt;&amp;lt;/OutboundXmlTemplate&amp;gt;&amp;lt;Identity vt="8" /&amp;gt;&amp;lt;/CustomProps&amp;gt;</TransportTypeData>

Error in VisualStudio deploy is:

        Error: Failed to update binding information.
        Invalid or malformed XML data.

So I believe the problem is that ElementTunnel with /decode is not expanding the syntax, and thus ElementTunnel /encode at Deploy Time is building bad XML in the binding file for WCF ports (this is for WCF-SQL adapter). Everything is working fine in binding files that don't have any WCF in them.

This is what I have in adapterXPaths.txt:

/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceiveLocationTransportTypeData/CustomProps/AdapterConfig
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceiveLocationTransportTypeData/CustomProps/BindingConfiguration
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceiveLocationTransportTypeData
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/ReceivePipelineData
/BindingInfo/ReceivePortCollection/ReceivePort/ReceiveLocations/ReceiveLocation/SendPipelineData

/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData/CustomProps/StaticAction
/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData/CustomProps/AdapterConfig
/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData/CustomProps/BindingConfiguration
/BindingInfo/SendPortCollection/SendPort/*/TransportTypeData
/BindingInfo/SendPortCollection/SendPort/ReceivePipelineData
/BindingInfo/SendPortCollection/SendPort/SendPipelineData

/BindingInfo/PartyCollection/Party/CustomData

What can I do to fix? 

Thanks,
Neal Walters

 

 

 

 

 

Coordinator
Jul 22, 2010 at 10:50 PM

Hi Neal,

Are you completely certain that you ran the ElementTunnel decode on PortBindingsMaster.xml?  It sure doesn't look like it.  Will you please try this from a Command Prompt?  Assume current directory is your project Deployment directory.

"C:\Program Files\Deployment Framework for BizTalk\5.0\Framework\DeployTools\ElementTunnel.exe" /i:PortBindingsMaster.xml /o:PortBindingsMaster.xml /x:"C:\Program Files\Deployment Framework for BizTalk\5.0\Framework\DeployTools\adapterXPaths.txt" /decode

Please be sure that PortBindingsMaster.xml matches the binding file that BizTalk Admin exports.

Let me know what happens...

Thanks,
Tom

Jul 23, 2010 at 2:13 AM

Once again, I must have been doing something really stupid.  I think when I look at binding files, my eyes go cross-eyed and a stupor comes over me.

I was wary because of the problem I had back in January, and I was convinced this had to be the same issue since it was the first time I did WCF.

I have one theory on how I got in this predicament.  I might have had /encode instead of /decode on the ElementTunnel, but then with all the heavy editing I was doing, with merging, copying from various bind files, I must have been creating a very screwy binding file.

It seems to be working for now. 


Question - is there still any reason do do the ifdef/else?  In other words, is the else needed or not?  It seems like you said elsewhere that you are always running the XMLPreprocess even in local depoys?  I think even with ElementTunnel, getting the else back in has been one of the confusing things for me. 

 

Muchas Gracias!

Neal

 

 

 

Coordinator
Jul 23, 2010 at 5:00 AM

Good, you're very welcome.  I answered the Else question here.

Thanks,
Tom