IBM MQ with JMS and .Net - c#

Are the WCF / .Net demos provided with IBM MQ still applicable if you use JMS with IBM MQ? Or do I need to write directly to JMS from .Net? (Very ignorant here if you couldn't tell). If I have to write to JMS directly then I guess i could use JNBridge or something.
Any info is greatly appreciated.

Yes, they still apply. You'll find that you have much better performance using a direct DLL for the server instead of a bridge, since the DLL directly implements the underlying messaging protocol for the server.

Related

How do I connect to the IBM WebSphere MQ without having the IBM WebSphere MQ Client installed on the client machine?

I was looking for something to enable me to do this but couldn't find much.
I followed the steps described in the following answer to another question -
https://stackoverflow.com/a/23920904/3299246
but that isn't working. I get a lot of errors saying the files/dependencies were not found.
Is there any way I can connect to the MQ without having the client installed?
Thanks.
Adding a new answer in light of the revelation that this is for mobile. You don't say whether this is for Windows Phone or Surface. I am not familiar enough with Surface, but IBM might even have a version of the MQ client that will work on it. Or maybe not.
Whether you are using Windows Phone for mobile or a Surface device, the device should not have a problem connecting to a WCF Service which connects to WMQ. James the Integration Guy has done a bit of work with this, and here's a blog post that might contain some ideas for you:
Using .NET WCF to connect to WebSphere MQ
Unfortunately, the blog appears to be inactive, so there may be no update on his progress.
ETA: Just to expand on my comment, Android can be made to connect to a WCF Service. Some links:
Lessons Learned: Getting Android to Connect to a WCF Service
How to connect to a wcf Service with Android - Stack Overflow
Connect to WCF service through android - Android Forums
Afraid not officially... At the moment, my understanding is to run MQ .NET applications you need to have the MQ Client (or Server) installed which provides the .NET capability (either through the file system or via the GAC). You can run in fully managed mode, avoiding the need for calling through the C runtime components for the client functionality.
With some releases of MQ you are able to extract out just the files you need (its not just one file!) and be able to run in fully managed mode, but I would not recommend it... Feel free to raise a requirement with IBM
You could take your life in your own hands and try using IKVM to convert the pure Java WebSphere MQ libraries to .Net IL. I have never tried it with WebSphere MQ Java libraries specifically, but I have had a 96% success rate with many other Java libs.
Even if this works.... it will be unsupported.
The first answer that comes to my mind is actually a question: Why on earth would you want to try to do this?
The WMQ client is very unintrusive and there really isn't a good reason to do without it. It's free to use and so cost is not an issue. Have you discovered some niche environment for which IBM has failed to provide a version of the client? Unless this is the case I suggest you abandon this notion.
Most of the integration of mobile to WebSphere MQ that I'm aware of uses MQTT and the WebSphere MQ MQXR component. MQXR (for Extended Reach) is an MQTT broker running as a sub-process of the QMgr. It provides the full MQTT broker implementation and optionally bridges between MQTT and the QMgr.
Please see the MQ Knowledge Center for details:
Administering WebSphere MQ Telemetry

Using WebSockets to communicate between Java and C# desktop applications?

I am interested in deploying a server to GoDaddy as a C# web application, then have desktop clients developed in C# and Java be able to subscribe/publish to the server using WebSockets (RFC 6455).
WebSocket supported libraries I am looking at are XSockets.Net and SignalR.
I am not able to find anything on using XSockets.Net (not to be confused with XSocket.org) in Java. I understand that XSockets targets MS .Net framework and Mono environments. However, looking at SignalR, there is also SignalA which is a Java based SignalR client for Android.
Thinking-out-loud... I understand there are many WebSocket libraries for Java, which suggests the idea that if I am able to publish a message (using WebSocket) from a Java application to a server, then I should be able to read it and processes it in C#, since WebSocket protocol is a standard.
Thus far, I believe a SignalR solution will satisfy my requirement to allow C# & Java applications to talk on the Web, but due to transport requirments of SignalR, my communication will not utilize WebSockets. Reading through SignalR requirements, to get WebSockets transport activated I must use Windows8+ with .Net Framework for 4.5+. GoDaddy does not use Windows8 for windows hosting, and even if it did, then all my clients must also use Windows8, which is not a guarentee.
So the question is: How can I get C# & Java desktop clients to talk on the web via WebSockets, othan than using SignalR and XSockets.Net?
Any help is very much appreciated!
EDIT: I will now look into deploying a C# XSockets.NET Server and have a C# XSockets.NET client and a Java JWebSocket client since both JWebSockets and XSockets support the WebSocket RFC6455 protocol. I will post my findings here and close this question if that was a successful effort.
You can implement a RFC6455 client in any language and use XSockets. However do note that XSockets uses a publish/subscribe pattern that you will have to implement as well to take benefit of the platform.
The upside is that you actually wont have to implement RFC6455 since you can implement a custom (non websocket protocol) and use that when communicating from desktop (or anything else). Since everything in XSockets is a plugin you can add custom protocols and still communicate with client talking RFC6455 since XSockets will offer cross-protocol communication.
So the thing you have to implement is actually only the publish/subscribe functionality in the java client.
There are probably not any Java clients out there that implements the IXSocketClient interface today, and we focused on Mono instead of Java when covering multi-platform support.
We will help you out in any way we can if you decide to write your own java implementation.
Note: as of the next version (not far away) it will be very easy to implement your custom protocol and connect from any device talking TCP/IP
In my humble opinion, you have misunderstood some things.
XSockets and SignalR are libraries which are totally oriented to a specific platform, .NET. They both wrap the functionality of WebSockets, a platform independent standard, to ease its use. This does not by anyway mean that you could use XSocket, or SignalR libraries in all platforms.
I suppose that creating a java client for XSockets or SignalR would be an overkill and would lead you to heavily depend on a 3rd party library. In your situation, I would go on with using WebSockets directly on my server side. Then I would use a library handling the WebSockets standard for each client, which could be different for each client development platform. Therefore, you would depend on one universal standard and you would minimize dependencies on 3rd party libraries.
Hope I helped!

How to use MUMPS with .NET?

I want to know how can i communicate with MUMPS using C# .NET?
There is a requirement where i have to develop the UI in .NET using any of the .NET technology like ASP.NET, WPF or Silverlight etc. But the backend it will be old 60s MUMPS which is non relational database.
Is there any way to communicate to procedure of MUMPS using .NET? how can i use .NET with MUMPS together? I could not find much resource on Internet so thought to ask here
Request you to help and guide me with my above query.
Thanks
Regards
VJ
It depends on which MUMPS solution you will be using.
One possibility is the M/Gateway Services Integrator (MGWSI) developed by M/Gateway and provided free of charge. From their web page (M/Gateway Developments, then click on the MGWSI Gateway tab):
The core MGWSI product is a generic integration engine, but we provide a range of specific integration gateways as part of the overall package, including:
Caché, GT.M or M21 to PHP (the m_php gateway) ;
Caché or GT.M to Java Server Pages (the m_jsp gateway) ;
Caché or GT.M to ASP.Net (the m_aspx gateway) ;
Another possibility is to use KB_SQL, which offer JDBC and ODBC drivers. KB_SQL can be used with most of MUMPS solutions.
Another possibility may be to use EsiObjects, which supports both GT.M and InterSystem Caché. From their FAQ :
EsiObjects supports 4 fundamental gateways:
TCP/IP Gateway: This gateway is used to connect the EsiObjects Client Development VDE with any of the supported M systems. Additionally, The TCP/IP Gateway is also used to connect the runtime environment via an ActiveX Control.
COM Bridge: This is used with Microsoft clients built using VB, C++, C# , etc. It uses the TCP/IP Gateway and implements the ActiveX control for EsiObjects.
Java Gateway: This gateway uses the TCP/IP Gateway. There exists a set of methods in the ESI library that let you generate external Java Proxy classes from any EsiObjects class. All the connectivity is built in. Therefore, you can take the Java file that is created and use it within your Java environment, using the proxies automatically accesses the data on the EsiObjects Server.
CORBA ORB (aka EsiORB): This package is an add-on to EsiObjects. It is an implementation of the Object Management Groups (OMG) Common Object Request Broker Architecture (CORBA). The ORB uses the TCP/IP Gateway.
If the MUMPS solution you use is InterSystem Caché, you could use Caché Managed Provider solution. That said, that solution would work only for InterSystem Caché, not for the other MUMPS solutions.
If the MUMPS solution you use is GT.M, you could use PIP since it offers a JDBC driver. That said, that solution would work only for GT.M, not for the other MUMPS solutions.

Resources for IBM WebSphere MQ and .NET implementation

I need help with implementing IBM WebSphere MQ for a system where the queue is supposed to send the XML messages to a SQL database. May please help me with resources and video tutorials for the matter in hand. The system will be in C#
Thanks!
Message Service Client for .NET a.k.a XMS .NET is now part of WebSphere MQ v701. You can find latest documentation on XMS .NET here. XMS .NET gets installed along with MQ Client from v701 on-wards.
How are you wanting to access MQ? Are you using JMS or MQI?
There are a couple different ways to access MQ from .NET. The first way is through the native MQ interface known as MQI. The second way is through a JMS implementation created by IBM called XMS.
The queue is not going to write anything into a database for you. You are are going to need to create a listener application that does that.
EDIT:
If you want to use JMS then you should take a look at the doc link that Shashi posted below. here
You will want to look at the docs under "Message Service Client .NET, Version 2.0.0" --> "Developing XMS Applications" --> "Writing XMS .NET applications"
Also take a look at the sample applications that are packaged with the client.
Essentially what you are going to end up doing is creating a connection to the queue manager (either remote or local depending on your use case), creating a destination object that will represent the queue you are trying to work with on the queue manager, and then creating a listener to receive messages from the queue (either sync or async depending on your use case).

Using Websphere MQ with JMS from a .NET application

I'm trying to send a message to a java server over a Websphere MQ which uses JMS as the transport protocol. I can happily drop messages on the MQ using the IBM supplied libraries, but the server rejects them. I'm assuming (hopefully correctly) that this is because I'm missing various JMS specific headers/properties on the MQ message.
I have ensured the payloads for the messages are the same by inspecting the queue (they are both map messages if that helps), but don't want to fully implement the JMS Websphere MQ protocol just to get this to work.
I'm wondering if anyone has managed to get this to work, and if so what's the minimum amount of information you need to specify in the JMS header? Are there any alternatives to doing this directly on the MQ (I've seen some about using java interop, but this is something I think would be overkill).
Any help would be greatly appreciated!
Can you paste the Java code you are using to read the message. Is that code assuming that the message is a "MapMessage". Normally something put into a Queue from a non-java client will appear as either a TextMessage or a BytesMessage.
The WebsphereMQ JMS api is normally fine with reading those messages without the JMS headers as long as you read as a TextMessage / BytesMessage as put.
In my server code, my content is normally put to the queue as bytes, and so appears as a BytesMessage, but just in case i get a message that was manually put on the queue, i catch the classcastexception, and test to see if it is in fact a TextMessage.
Are you trying to use MQI to send JMS messages? Take a look at the XMS libraries from IBM. They will provide everything that you need. The libraries provide a .NET implementation of JMS that works with WebsphereMQ. I have used these libs many times over the past year, talking between java and .net systems, and have been very happy with the functionality.
XMS .NET Library Download
WebSphere MQ doesn't have very clear error messages. The things I suggest to check when something went wrong are:
Exception details and their recursive causes.
MQ error logs.
Event logs sourced by MQ.
.FDC files.
I think I had the same problem and I couldn't get XMS to work. In case it's still a problem to you, this might help
Regards Kristoffer

Categories