def METHOD_NAME(pfnDict):
    """
    Create PFN URI from pfnDict
    :param dict pfnDict:
    """
    # # make sure all keys are in
    allDict = dict.fromkeys(["Protocol", "Host", "Port", "WSUrl", "Path", "FileName"], "")
    if not isinstance(pfnDict, dict):
        return S_ERROR(f"pfnunparse: wrong type for pfnDict argument, expected a dict, got {type(pfnDict)}")
    allDict.update(pfnDict)
    pfnDict = allDict
    # # c
    # # /a/b/c
    filePath = os.path.normpath("/" + pfnDict["Path"] + "/" + pfnDict["FileName"]).replace("//", "/")
    # # host
    uri = pfnDict["Host"]
    if pfnDict["Host"]:
        if pfnDict["Port"]:
            # host:port
            uri = f"{pfnDict['Host']}:{pfnDict['Port']}"
        if pfnDict["WSUrl"]:
            if "?" in pfnDict["WSUrl"] and "=" in pfnDict["WSUrl"]:  # pylint: disable=unsupported-membership-test
                # host/wsurl
                # host:port/wsurl
                uri = f"{uri}{pfnDict['WSUrl']}"
            else:
                # host/wsurl
                # host:port/wsurl
                uri = f"{uri}{pfnDict['WSUrl']}?="
    if pfnDict["Protocol"]:
        if uri:
            # proto://host
            # proto://host:port
            # proto://host:port/wsurl
            uri = f"{pfnDict['Protocol']}://{uri}"
        else:
            # proto:
            uri = f"{pfnDict['Protocol']}:"
    pfn = f"{uri}{filePath}"
    # c
    # /a/b/c
    # proto:/a/b/c
    # proto://host/a/b/c
    # proto://host:port/a/b/c
    # proto://host:port/wsurl/a/b/c
    return S_OK(pfn)