BizTalk 2016 SharePoint Adapter - Force Use of Port 443 - sharepoint

I'm trying to integrate a BizTalk 2016 FP3 application with a SharePoint 2013 site that is available only over port 443 / https.
I would like to use a dynamic send port, the new(ish) adapter and the CSOM.
I have an orchestration with a logical one-way send port called "SendToSp". Within the orchestration I have an expression shape containing the following:
SendToSp(Microsoft.XLANGs.BaseTypes.Address) = "wss://collaboration.xxx.co.uk/sites/HousingICTSolution/Technical/Lists/BizTalkTestList/"
Following this, there's a construct message shape, containing and assignment shape where the message to send is created and the context properties assigned as follows:
msgNvpToSp(xxx.Integration.Common.Schemas.PropertySchema.FormType) = "DynamicSharePointSend";
msgNvpToSp(WSS.ConfigPropertiesXml) = "<ConfigPropertiesXml><PropertyName1>Title</PropertyName1><PropertySource1>This comes from received xml msg</PropertySource1></ConfigPropertiesXml>";
msgNvpToSp(WSS.ConfigAdapterWSPort) = 443;
msgNvpToSp(WSS.ConfigOverwrite) = "no";
msgNvpToSp(WSS.ConfigUseClientOM) = "yes";
My problem is, when BizTalk sends the message I get a "Transmission Failure" with the following description:
[Microsoft.SharePoint.Client.ClientRequestException] Cannot contact site at the specified URL http://collaboration.xxx.co.uk:80/.
This error was triggered by the Windows SharePoint Services receive location or send port with URI wss://collaboration.xxx.co.uk:80/sites/HousingICTSolution/Technical/Lists/BizTalkTestList/.
Windows SharePoint Services adapter event ID: 12310
If I check the context properties of the suspended message then I see the following:
Notice how the value for "OutboundTransportLocation" property includes port 443.
Any ideas why it's insisting on sending on port 80 even when I've told it to use 443?

In the address, you have to put "wsss://collaboration.xxx.co.uk/sites/HousingICTSolution/Technical/Lists/BizTalkTestList/", then https and port 443 will be used.

Related

Could not find Host of Azure In App SQL Database

I've created a MySQL In App database for my Azure App, and got the connection string for it. This string is injected into the application.json, and then used to create the actual connection:
WebApplicationBuilder builder = // get it somewhere
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
builder.Services.AddDbContext<DatabaseContext>(options => options.UseMySQL(connectionString));
Only... no connection string works. The one with the port (Database=localdb;Data Source=127.0.0.1:53844;User Id=azure;Password=password) throws:
System.Net.Sockets.SocketException (11001): No such host is known.
And the one without the port (Database=localdb;Data Source=127.0.0.1;User Id=azure;Password=password) throws:
System.Net.Sockets.SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions.
This question sugested another connection string (Server=127.0.0.1; Port=53844; Database=localdb; Uid=azure; Pwd=password), which weirdly enough also throws this exception, even though the port is defined:
System.Net.Sockets.SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions.
And the manual suggests yet another string (server=localhost;database=localdb;user=azure;password=password) which again throws one of the two exceptions depending on if the port is present.
Connecting via the browser works fine, so I can confirm port, username and password work normally.
Just to be sure, I tried "localhost" as the host, too. Same results.
What am I doing wrong?
It's a mix out of all these connection strings:
server=localhost;port=53844;database=localdb;user=azure;password=password
(Port and server separated, but both present.)
Works for me right now.

Connection configuration loops - Prosys OPC UA Client

I'm using sample codes from documentation and I'm trying to connect to server using Prosys OPC UA Client. I have tried opcua-commander and integration objects opc ua client and it looks like server works just fine.
Here's what is happening:
After entering endpointUrl, client adds to url -- urn:NodeOPCUA-Server-default.
Client asks to specify security settings.
Client asks to choose server - only 1 option and it's urn:NodeOPCUA-Server-default.
And it goes back to step 2 and 3 over and over.
If I just minimize prosys client without closing configuration after some time I get this info in terminal:
Server: closing SESSION new ProsysOpcUaClient Session15 because of timeout = 300000 has expired without a keep alive
\x1B[46mchannel = \x1B[49m ::ffff:10.10.13.2 port = 51824
I have tried this project and it works -> node-opcua-htmlpanel. What's missing in sample code then?
After opening debugger I have noticed that each Time I select security settings and hit OK, server_publish_engine reports:
server_publish_engine:179 Cencelling pending PublishRequest with statusCode BadSecureChannelClosed (0x80860000) length = 0
This is due to a specific interoperability issue that was introduced in node-opcua#0.2.2. this will be fixed in next version of node-opcua. The resolution can be tracked here https://github.com/node-opcua/node-opcua/issues/464
The issue has been handled at the Prosys OPC Forum:
The error happens because the server sends different
EndpointDescriptions in GetEndpointsResponse and
CreateSessionResponse.
In GetEndpoints, the returned EndpointDescriptions contain
TransportProfileUri=http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary.
In CreateSessionResponse, the corresponding TransportProfileUri is
empty.
In principle, the server application is not working according to
specification. The part 4 of the OPC UA specification states that “The
Server shall return a set of EndpointDescriptions available for the
serverUri specified in the request. … The Client shall verify this
list with the list from a DiscoveryEndpoint if it used a
DiscoveryEndpoint to fetch the EndpointDescriptions. It is recommended
that Servers only include the server.applicationUri, endpointUrl,
securityMode, securityPolicyUri, userIdentityTokens,
transportProfileUri and securityLevel with all other parameters set to
null. Only the recommended parameters shall be verified by the
client.”

Error inserting a list item to Sharepoint using WSS via BizTalk "Cannot complete this action"

I am getting this error when attempting to insert an item into a SharePoint list from BizTalk:
The adapter failed to transmit message going to send port "SharepointTestResultUpload" with URL "wss://localhost:13561/semiworks/Lists/TestResult". It will be retransmitted after the retry interval specified for this Send Port. Details:"[Microsoft.SharePoint.Client.ServerException] Cannot complete this action.
Please try again. Server Error Code: -2147467259Trace: at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream responseStream)
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()
at Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer(ChunkStringBuilder sb)
at Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery()
at Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery()
at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
at Microsoft.BizTalk.KwTpm.WssAdapter.ClientOmAccessor.RequestInfo.get_Lists()
at Microsoft.BizTalk.KwTpm.WssAdapter.ClientOmAccessor.WebBucket.PopulateLists(RequestInfo reqInfo)
at Microsoft.BizTalk.KwTpm.WssAdapter.ClientOmAccessor.WebBucket.SafePopulateLists(RequestInfo reqInfo)
at Microsoft.BizTalk.KwTpm.WssAdapter.ClientOmAccessor.WebBucket..ctor(RequestInfo reqInfo)
at Microsoft.BizTalk.KwTpm.WssAdapter.ClientOmAccessor.ListsAccessor.GetWebBucket()
at Microsoft.BizTalk.KwTpm.WssAdapter.ClientOmAccessor.ListsAccessor..ctor(String siteUrl, String sharePointOnlineUsername, String sharePointOnlinePassword)
at Microsoft.BizTalk.KwTpm.WssAdapter.ClientOmAccessor.ListsAccessor.TryOpenWebSite(String siteUrl, String sharePointOnlineUsername, String sharePointOnlinePassword, Exception& lastError)
This error was triggered by the Windows SharePoint Services receive location or send port with URI wss://localhost:13561/semiworks/Lists/TestResult.
Windows SharePoint Services adapter event ID: 12310".
I am running BizTalk 2013 and SharePoint 2010 on the same server and the BizTalk server configuration shows the SharePoint Adapter as successfully installed/configured.
EDIT
I dug through the SharePoint logs and found the corresponding entry there:
http://pastebin.com/m2BaqViE
I already trimmed it down, but it is still long.
>
I think the key error in SharePoint is "Failed to find the default form for PAGETYPE PAGE_EDITFORM" and this answer here
Why won't the new item form create for an external list which advices to "delete the external list and recreate it" although it this case the person actually had to go as far as to create it with a new name before their problem was resolved.

VieleRETS and Rapattoni RETS Server

I am using vieleRETS as RETS client. I have all the information regarding Rapattoni RETS server such as userID, password and Agent-header.
I have requested the ISP to open up the port 6103. The support team conformed the port is open. The website is hosted on a shared hosting.
As per my request the tech monitored the HTTP request on port 6103. There is no activity on that port.
I checked the RETS server with firewall_check.php within the vieleRETS extras folder.
it works. but the same test on the website failed with the following error.
FAILURE ERRNO 111 ERRSTR Connection refused
My question is if the port 6103 open on web server, will it return success?
This is the code that checks . . .
set_time_limit(0);
$socket = #fsockopen($address, $port, $errno, $errstr);
Rapattoni support is best in the west (everywhere actually, but that doesn't rhyme). It always helps if you can provide a an http capture from wire shark or fiddler . Make sure that your MLS hasn't put an IP filter on your setup. Also make sure that you are selecting version 1.7.2... It's been some months that I've been out of the RETS game, but I'm sure Tony will get you up and running... Rets#rapattoni.com should be your POC

IIS Application pool identity

I am attempting to obtain a data feed from yahoo finance. I am doing this with the following code:
System.Net.WebRequest request = System.Net.WebRequest.Create(http://download.finance.yahoo.com/download/quotes.csv?format=sl&ext=.csv&symbols=^ftse,^ftmc,^ftas,^ftt1x,^dJA);
request.UseDefaultCredentials = true;
// set properties of the request
using (System.Net.WebResponse response = request.GetResponse())
{
using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
I have placed this code into a console application and, using Console.WriteLine on the output I receive the information I require. I have used the 'Run as..' command to execute this using a specific domain account.
When I use this code from within a Page load I receive the following error message "No connection could be made because the target machine actively refused it 76.13.114.90:80".
This seems to suggest that the call is reaching yahoo (is this true?) and that there is something missing.
This would suggest there is an identity difference in the calls between the console application and application pool.
Environment is: Windows Server 2003, IIS 6.0, .net 4.0
"Target machine actively refused it" indicates that the TCP connection itself is not succeeding. This could be due to the fact that the Proxy settings when run under IIS are not the same as those that apply when you run in the console.
You can fix this by setting a WebProxy on your request, that points to the proxy server being used in the environment.
Yes, an active refusal is indication that the target machine is receiving the request and the information in the headers is either incorrect or insufficient to process the request. It is entirely possible that if you had to run this call using a "run as" command in console that the application pool's identity user does not have the appropriate permission or username. You can attempt to change the identity user to this specific domain account to see if that alleviates the problem, but you may have to isolate this particular function into its own application pool in order to protect the rest of the website from having this specification.

Resources