There are scenarios where you may want to use different protocols between the mpi processor hosts. For example, if you want to host many mpi processors on one machine, you may want them to used shared memory (net named pipeline) for their communication, and then use tcp for the communication to processors on different machines.
The below configs show a 3 processor environment. The first two processors are hosted in one process, using the NetNamedPipelineBinding to communicate with each other, and NetTcpBinding for the 3rd processor, being hosted on another machine.
<configuration>
<configSections>
<section name="Mpi" type="Mpi.ConfigurationSection, Mpi"/>
</configSections>
<Mpi>
<Environments>
<Environment name="MPIEnvironment">
<Hosts>
<Host comms="MPI_COMM_WORLD"
client="MpiClient1"
service="MpiService1" />
<Host comms="MPI_COMM_WORLD"
client="MpiClient2"
service="MpiService2"/>
<Host comms="MPI_COMM_WORLD"
client="MpiClient3"
/>
</Hosts>
</Environment>
</Environments>
</Mpi>
<system.serviceModel>
<client>
<endpoint address="net.pipe://localhost/MpiService1" binding="netNamedPipeBinding"
bindingConfiguration="" contract="Mpi.IMpiService" name="MpiClient1">
<identity>
<userPrincipalName value="" />
</identity>
</endpoint>
<endpoint address="net.pipe://localhost/MpiService2" binding="netNamedPipeBinding"
bindingConfiguration="" contract="Mpi.IMpiService" name="MpiClient2">
<identity>
<userPrincipalName value="" />
</identity>
</endpoint>
<endpoint address="net.tcp://machine2:8080/MpiService3" binding="netTcpBinding"
bindingConfiguration="" contract="Mpi.IMpiService" name="MpiClient3">
<identity>
<userPrincipalName value="" />
</identity>
</endpoint>
</client>
<behaviors>
<serviceBehaviors>
<behavior name="MpiServiceBehavior">
<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"
includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MpiServiceBehavior" name="MpiService1">
<endpoint address="net.pipe://localhost/MpiService1" binding="netNamedPipeBinding"
bindingConfiguration="" contract="Mpi.IMpiService" />
<endpoint address="net.tcp://localhost/MpiService1" binding="netTcpBinding"
bindingConfiguration="" contract="Mpi.IMpiService" />
</service>
<service behaviorConfiguration="MpiServiceBehavior" name="MpiService2">
<endpoint address="net.pipe://localhost/MpiService2" binding="netNamedPipeBinding"
bindingConfiguration="" contract="Mpi.IMpiService" />
<endpoint address="net.tcp://localhost/MpiService2" binding="netTcpBinding"
bindingConfiguration="" contract="Mpi.IMpiService" />
</service>
</services>
</system.serviceModel>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
</configuration>
The second machine has tcp client entries to communicate with the 2 processors on the other machine, while it can use the pipeline binding to communicate with itself.
<configuration>
<configSections>
<section name="Mpi" type="Mpi.ConfigurationSection, Mpi"/>
</configSections>
<Mpi>
<Environments>
<Environment name="MPIEnvironment">
<Hosts>
<Host comms="MPI_COMM_WORLD"
client="MpiClient1"
/>
<Host comms="MPI_COMM_WORLD"
client="MpiClient2"
/>
<Host comms="MPI_COMM_WORLD"
client="MpiClient3"
service="MpiService3"/>
</Hosts>
</Environment>
</Environments>
</Mpi>
<system.serviceModel>
<client>
<endpoint address="net.tcp://machine1/MpiService1" binding="netTcpBinding"
bindingConfiguration="" contract="Mpi.IMpiService" name="MpiClient1">
<identity>
<userPrincipalName value="" />
</identity>
</endpoint>
<endpoint address="net.tcp://machine1/MpiService2" binding="netTcpBinding"
bindingConfiguration="" contract="Mpi.IMpiService" name="MpiClient2">
<identity>
<userPrincipalName value="" />
</identity>
</endpoint>
<endpoint address="net.pipe://localhost/MpiService3" binding="netNamedPipeBinding"
bindingConfiguration="" contract="Mpi.IMpiService" name="MpiClient3">
<identity>
<userPrincipalName value="" />
</identity>
</endpoint>
</client>
<behaviors>
<serviceBehaviors>
<behavior name="MpiServiceBehavior">
<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"
includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MpiServiceBehavior" name="MpiService3">
<endpoint address="net.pipe://localhost/MpiService3" binding="netNamedPipeBinding"
bindingConfiguration="" contract="Mpi.IMpiService" />
<endpoint address="net.tcp://localhost:8080/MpiService3" binding="netTcpBinding"
bindingConfiguration="" contract="Mpi.IMpiService" />
</service>
</services>
</system.serviceModel>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
</configuration>