WCF / ASMX :: Custom UserNamePasswordValidator Never Called
Jan 19, 2011
I have a problem with custom authentication over https. What I need is a secure channel and authenitcation on message level. I got it working quite well, but my custom validator never gets called when I send a message to the web service using SoapUI. The service is called, however the Validate method in the custom validator is never called. The validator is available for the runtime, I have checked by misspelling the type in customUserNamePasswordValidatorType which caused an exception saying it could not find type when I accessed the WSDL.
I have a webservice that wraps an unmanaged C++ dll. I'm wondering how I should handle state and multiple connections? I'm thinking that the unmanaged dll will be shared across all connections...is this the case? Note that I am using a shared host so I have limited abilities to modify IIS specifically. If the unmanaged dll is not shared and will have a unique instance for every connection then I have nothing to worry about. If it's the case it's shared then I guess I will have to persist the unmanaged state on a per-connection basis through a DB?
I have created a web service. When I check the service directly from it's web page it works correctly. Here's what the code looks like:
using System; using System.Collections.Generic; using System.Web; using System.Web.Configuration; using System.Runtime.Serialization; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Script.Services; using System.Runtime.Serialization.Json; using System.IO; using System.Text; using Microsoft.SharePoint; using System.Collections; namespace MDA.WebParts.SPRolodex_Web_Service { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService()] public class SPRolodex_Web_Service : System.Web.Services.WebService { public SPRolodex_Web_Service() { } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public bool ListExists(string personalUrl, string listName) { try { SPSite mySite = new SPSite(personalUrl); SPWeb web = mySite.OpenWeb(); SPList list = web.Lists[listName]; return true; } catch (ArgumentException) { return false; } } } }
However, when I call the method using ServiceProxy.js (a jQuery based library) I get this error
"Only Web services with a [ScriptService] attribute on the class definition can be called from script."
As you can see the class has the ScriptService attribute and the methods have the ServiceMethod attribute.
I create a webcontrol (DefectsList as a gridview) with an icon that call an httphandler to open an other webcontrol (DefectEditor as an editor) but the CreateChildControls of the editor is not called!!
see the details below of DefectsList:
[Code]....
and the javascript: [Code]....
see the details below of DefectEditor: [Code]....
Why the CreateChildControls is not called, I think is due to the HttpHandler? so how to do?
I have a web user control that implements iWebEditable, and a custom editor part the implements EditorPart. In my custom editor part class, i define a text box, create the textbox in createchildcontrols() then render the textbox in RenderContents() using the following line:
_txtTitle.RenderControl(writer);
As soon as I add the line above (which displays the text box in the editor part) the functions createchildcontrols and applychanges are called in the wrong order. i click save button in the editor part to save changes to textbox, createchildcontrols() is called first, then applychanges() is called after the editorpart and the webpart (custom control) are rendered requiring me to refresh the page (which is not the desired functionality ;-] ). As soon as I comment out the line above in RenderContents() the functions are called in the correct order: appychanges() first, then createchildcontrols().
I want to unit test my rendering engine for an ASP.NET app. I have some custom controls created in that app. Most of those control rely on having CreateChildControls() method called by the ASP.Net engine wheather during initial call or a postback.When running a test CreateChildControls() does not get called and the control is in an "invalid" state.
As a workaround to get the tests going I explicitly call some other public method that calls EnsureChildControls() in it. This in effect causes CreateChildControls() to be executed and the control being initialized properly (just as it would normally when hosted on web server). I would like to get rid of that extra method call and the control to still be in a proper state for testing.
there is a sample code for creating a custom textbox control with built in validation posted here Building ASP.NET TextBox with Integrated Validation And Switchable Input Modes. Inside the code there is a call to Controls.Add(validator) which adds the asp.net validator control to the textbox. when the textbox is used on the page, the validator is rendered to the page although the validator is added to the textbox and not to the page!
I have a WCF service in a virtual directory that is called in the code behind of a page that is in the parent directory, when i debug the code i can see the wcf service is being called, however when the service calls Membership.GetUser() it alway returns null. The user has already logged in to the asp.net site. When i call the service via jquery it does pick up the correct user, but i need to be able to call it via the code behind as well. I am developing in .Net 3.5 how i can make the Wcf pick up the logged in user?
I have an ASPX page which hosts a Custom Control. That custom control needs to call an ASMX web service. I would use a PageMethod, if the fact that I'm calling from within a Custom Control didn't preclude that. I'm looking for some guidance on the most effective way to try and lock down the ASMX call such that it will only succeed for my users calling it from my ASPX page - and not for anyone trying to call it from elsewhere. I've seen various ideas around session variables and so on.
I have a weird design. I have page called A, it has control called C1 which has a control called C1-1 which has a control called C-1-1-1. C-1-1-1 is inside a modal popup extender. Whenever their is a postback, the C-1-1-1 's Pre_Render is called twice, first with the correct values and parameters which seem right. And second with all values seemingly reset (sounds like a new object construction).
I have a custom class in server side it hold the business logic. Now i have a Custom event in the business logic module, i want to trigger that event in the wcf is it possible. But in the below am unable to call Instance_BussinessUpdateEvent() method. Is it possible to call like this or is there is any other method to trigger the eveing in wcf
[OperationContract] public string DoWork() { Businessclass.Instance.BusinessclassEvent += new BusinessUpdatel(Instance_BussinessUpdateEvent); return } void Instance_BussinessUpdateEvent(BussEvent bussEvent){ }
I am using Kerberos as the Authentication mode for a WCF Client to interact with an ASMX Web Service. I am using customBinding in the WCF Client. I am getting the below mentioned Fault Exception when I invoke the HelloWorld Method by creating a Proxy using SVCUTIL.
`System.Web.Services.Protocols.SoapHeaderException: Server unavailable, please try later ---> System.ApplicationException: WSE841: An error occured processing an outgoing fault response. ---> System.Web.Services.Protocols.SoapException:
System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: WSE914: This instance of derived key token does not support encryption, decryption, or key wrapping. It can only be used to sign or verify signature. Please make sure that the length of the derived key matches the length of the key required by the symmetric encryption algorithm configured for the derived key token manager.
at Microsoft.Web.Services3.Security.Tokens.DerivedKeyToken.Psha1SymmetricKeyAlgorithm.get_EncryptionFormatter() at Microsoft.Web.Services3.Security.EncryptedData.ResolveDecryptionKey(String algorithmUri, KeyInfo keyInfo) at Microsoft.Web.Services3.Security.EncryptedData.Decrypt(XmlElement encryptedElement)
I am badly struck with this exception and unable to progress further.
how to implement WCF username authentication with a custom validator in both client side and server side. I am trying this since last 2 days. but no result.
ClassA is a custom class generated from a "type" in oracle database. ClassB is a custom class generated from a "table of type ClassA" in Oracle database.
The exposed service includes a login procedure which gets a username as input parameter and returns object B. Debugging the login procedure I can see that the data is retrieved from the database but not printed in the wsdl..
[Code]....
My ClassB definition is as follows:
[XmlInclude(typeof(ClassB))] public class ClassB : INullable, IOracleCustomType, IXmlSerializable ...
similar definition holds for ClassA as well. the generated wsdl is :
<? xml version="1.0" encoding="utf-8" ?> <ClassB xmlns="http://tempuri/org" />
I have a custom class declared as follows (in vb.net)
<Serializable()> _ Public Class NumInfo Public n As String Public f As Integer Public fc As char() Public t As Integer Public tc As char() Private validFlag As Boolean = True Public Sub New() End Sub
I also have public properties(read/write) for all the public variables
End Class In my service.asmx codebehind class I have a webmethod as follows: <WebMethod> _ <XmlInclude(GetType(NumInfo))> Public Function ConvertTo(ByVal info As NumInfo) As String Return mbc(info) 'mbc is another function defined in my service.asmx "service" class End Function
The problem is that when I start debugging it to test it, the page that I get does not contain any fields where I could input the values for the public fields of numInfo. How do I initialise the class? There is no "Invoke" button either. All I see are soap details as below:
ConvertTo Test The test form is only available for methods with primitive types as parameters. SOAP 1.1 The following is a sample SOAP 1.1 request and response. The placeholders shown need to be replaced with actual values. POST /BaseConverter/BaseCon.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://RohitServices.in/ConvertTo" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ConvertTo xmlns="http://RohitServices.in/"> <info> <n>string</n> <f>int</f> <fc> <char>char</char> <char>char</char> </fc>
What am I doing wrong? For the record I tried replacing char() with string to see if it was the array causing problems but that didn't help either. I'm fairly new to web services. I tried replacing the custom object parameter with a primitive parameter just to check how things worked and it rendered a page with an input field and invoke button. I just can't seem to get it working with custom object.
I have a fundamental question to ask about web services. I'm currently writing a service that has custom classes (lots of them). Let's say a car is one example. For some reason I was thinking that the service should expose these objects. However once I created a site to consume the service, it looks as though the classes are not meant to be exposed. It looks like the best practice is to take in a string which may be xml or not and convert that string into the object in the service code.(especially for error handling or input validation)
For example, if I had the web method:
[WebMethod] public car getCar(int carId) { //code here to return car object }
This will take a car ID and return a car object. It also shows all the elements in the SOAP request and response objects (as well as the WSDL) which can be to external developers. However, when trying to consume the service from a website (or reference it in my code), I then need access to the Car class (which implies i need to expose it through the services as well?).